草庐IT

jvm-bytecode

全部标签

java - JVM 垃圾收集和分页内存架构

在讨论Java和/或垃圾收集的最近10年中,我无法捍卫的唯一性能损失是垃圾收集算法在分页内存架构中运行时或多或少会中断,并且部分堆正在被调出。Unix系统(尤其是Linux)会主动调出一段时间未触及的内存,虽然这对您的普通泄漏c应用程序有好处,但它会在内存紧张的情况下扼杀java的性能。我知道最好的做法是保持最大堆小于物理内存。(或者你会看到你的应用程序交换到死)但想法-至少在unix世界中,内存可以更好地用于文件系统缓存等。我的问题是:是否有任何分页(感知)垃圾收集算法? 最佳答案 我要争辩说,这并不像您想象的那么大。为了确保我们

java - 'jvm-1。 8' is not a valid choice for '-目标'

当我尝试制作我的项目时,IntelliJ提示以下异常。Error:scalac:'jvm-1.8'isnotavalidchoicefor'-target'Error:scalac:badoption:'-target:jvm-1.8'但是“gradlewcleaninstall”工作得很好。项目设置是:gradle版本2.3scala2.10和java4个模块中的3个使用java1.7(源和目标兼容性),第4个模块的源和目标兼容性为1.8,导致了问题。有什么办法可以避免错误吗?(迁移到java7不是一个选项,升级scala是) 最佳答案

java - 没有垃圾回收的 JVM

我在许多线程中读到,不可能在Sun的JVM上关闭垃圾收集。但是,出于我们研究项目的目的,我们需要此功能。任何人都可以推荐一个没有垃圾收集或允许关闭它的JVM实现吗?谢谢。 最佳答案 Iwantedtofindafastwaytokeepallobjectsinmemoryforasimpleinitialproofofconcept.执行此操作的简单方法是使用大到GC永远不需要运行的堆来运行JVM。将-Xmx和-Xms选项设置为较大的值,并打开GC日志记录以确认GC不会运行测试持续时间。这比修改JVM更快、更直接。(事后看来,这可能

java - 当运行我的代码时,如何调试 JVM 中发生的段错误?

我的Java应用程序开始定期崩溃,并出现SIGSEGV和堆栈数据转储以及文本文件中的大量信息。我已经在gdb中调试了C程序,并且已经从我的IDE中调试了Java代码。我不确定如何处理正在运行的Java程序中类似C的崩溃。我假设我在此处查看的不是JVM错误。其他Java程序运行得很好,Sun的JVM可能比我的代码更稳定。但是,我什至不知道如何使用Java代码导致段错误。肯定有足够的可用内存,当我上次检查探查器时,堆使用率约为50%,偶尔会达到80%左右的峰值。是否有任何我可以调查的启动参数?处理这样的错误时,什么是好的list?虽然到目前为止我还不能可靠地重现该事件,但它似乎也并非完全随

java - JVM 在调用本地方法时必须做什么?

当调用声明为native的Java方法时,JVM运行时通常必须执行哪些步骤?HotSpot1.8.0JVM如何实现JNI函数调用?涉及哪些检查步骤(例如,返回后未处理的异常?),JVM要执行哪些簿记(例如,本地引用注册表?),以及在调用nativeJava方法后控制去哪里?如果有人可以提供nativeHotSpot1.8.0代码的入口点或重要方法,我将不胜感激。免责声明:我知道我可以自己阅读代码,但事先的解释有助于快速找到我阅读代码的方法。此外,我发现这个问题值得谷歌搜索。;) 最佳答案 与简单的C函数调用相比,从Java调用JNI

java - JVM 压缩 Oops 背后的技巧

所以我知道HotSpotVM现在默认启用压缩oops。从JavaSE6u23开始,它通过VM选项-XX:+UseCompressedOops支持这一点。我知道它允许有效的CPU缓存利用,因为CPU缓存可以容纳比处理64位大小的引用更多的引用。但我不明白的是,仅使用32位JVM如何寻址多达264个地址。为了简化问题,我们如何仅使用2位来寻址最多24个内存地址?这种地址方案的可能编码/解码是什么? 最佳答案 有关压缩oops的详细说明,请参阅"CompressedoopsintheHotspotJVM"JohnRose@Oracle的文

java - 在旧的和奇异的 JVM 上,java.io.BufferedInputStream 的默认缓冲区大小是多少?

我一直在为一篇关于java.io.BufferedInputStream和缓冲区的博客文章做一些研究。显然,这些年来,默认值已经从可怜的512字节增长到Sun的Java7实现时的8192字节,甚至在JavaDocsinJDK1.1.8中明确指定。.我的问题也提出了who/whatdeciedeswhatthedefaultshouldbe的问题--它不像我预期的那样黑白分明。我很好奇每个版本发布时的默认缓冲区大小是多少,以及它在其他奇特的JVM中可能是什么。到目前为止,我已经通过源代码、JavaDocs或Sun1.0、1.1、1.4、Java5、Java6和(再次自以为是)Sun的Ja

java - 强制或生成jvm核心转储(IBM JVM)

这个问题已经在这里有了答案:9年前关闭。PossibleDuplicate:CanIforcegenerationofaJVMcrashlogfile?如何在Java应用程序服务器上或一般情况下强制或生成JVM核心转储? 最佳答案 问题(摘要):要诊断与在WebSphereApplicationServerCommunityEdition上运行的客户应用程序挂起或性能不佳有关的问题,需要用户生成各种转储并将其发送给IBM支持人员进行诊断。该技术说明解释了当WebSphereApplicationServerCommunityEdit

java - 64 位 JVM 上对象引用的内存要求

在32位JVM上(至少在Hotspot上)对对象的引用占用4个字节。64位的HotspotJVM需要8字节吗?或者正在进行一些巧妙的压缩?否则,每个Object[]都需要两倍的堆内存,但我认为(希望,期望)并非如此。更新/额外问题:这真的很重要吗,或者这是一个可以忽略不计的增加,因为大多数引用都指向比几个字节大得多的对象(而有人可能会争辩说这些对象是反过来主要由对其他对象的引用组成)? 最佳答案 在64位系统中,对象引用通常为8字节长。但在Sun/Oracle的最新JVM中,您可以启用CompressedOops,以较小的堆大小限制

一文吃透JVM分代回收机制

为什么要分代   分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。   在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。   试想,在不进行对象存活时间区分的情况下,每次垃圾回收都是对整个堆空间