Tag: jvm hotspot

-XX:-PrintGC和XX:-PrintGCDetails标志做什么?

我在这里找到了JVM标志。 是否有更详细的解释他们到底做了什么?

HotSpot JIT内联策略:自上而下或下至上

假设我们有3个方法:从方法1调用方法2,从方法2调用方法3.方法2和3各自大小为30个字节码。 另外,假设确定性方法2总是从方法1中恰好调用一次,并且方法3总是从方法2中调用一次。 如果方法2首先被内联,则方法3将直接从方法1的主体调用,并且可以依次内联。 如果方法3首先内联到方法2中,则后者的大小将变为大约60个字节码,并且不能内联,因为默认的MaxInlineSize阈值是35个字节码。 HotSpot JIT以哪种顺序内联方法:自上而下或下至上?

鼓励JVM加入GC而不是增加堆?

(注意,当我说“JVM”时,我的意思是“Hotspot”,我正在运行最新的Java 1.6更新。) 示例情况: 我的JVM在-Xmx设置为1gb的情况下运行。 目前,堆已经分配了500mb,其中使用了450mb。 该程序需要在堆上加载另外200 MB。 目前,堆中有300mb的“可收集”垃圾(我们假设它们都是最老的一代)。 在正常操作下,JVM会将堆增长到700 MB左右,并在它到达时进行垃圾收集。 在这种情况下我想要的是JVM首先gc,然后分配新的东西,这样我们最终得到的堆大小保持在500mb,而使用的堆在350mb。 是否有JVM参数组合可以做到这一点?

分析gc日志

我正在使用-XX:+PrintGCApplicationStoppedTime和-XX:+PrintGCApplicationConcurrentTime选项来打开gc日志记录。 但是发现只有在4 0r 5 PrintGCApplicationStoppedTime打印后PrintGCApplicationStoppedTime通过-XX:+PrintGCDetails命令打印gc日志的实际细节! 根据定义, PrintGCApplicationStoppedTime为每个gc打印应用程序停止时间。 但我不清楚为什么它打印如下所示的例子。 是因为 PrintGCApplicationStoppedTime只需在每个安全点到达后打印 (要么) 日志文件将由不同的gc线程记录。 我使用Concurrent扫描完整的GC和年轻一代的ParNew 我的应用是web应用程序。 O / p模式 – 我是这样的: Application time: 0.3847031 seconds Total time for which application threads were stopped: 0.3135419 seconds Application time: 0.1520723 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds Total time for which […]

JVM HotSpot上的Java Exceptions计数器

我想知道是否可以在不更改应用程序代码的情况下记录JVM级别发生的每个exception? 每个例外,我的意思是捕获和未捕获的exception…我想稍后分析这些日志并按exception类型(类)对它们进行分组,并简单地按类型计算exception。 我正在使用HotSpot;) 也许更聪明的为什么这样做? 例如,任何免费的探查器(YourKit有它,但它不是免费的)? 我认为JRockit在管理控制台中有exception计数器,但是没有看到类似的HotSpot。

JVM如何决定JIT编译方法(将方法归类为“热门”)?

我已经使用-XX:+PrintCompilation ,我知道JIT编译器的基本技术以及使用JIT编译的原因。 然而,我仍然没有发现JVM如何决定JIT编译方法,即“当JIT编译方法的时候到了”。 我是否正确地假设每个方法都开始被解释,并且只要它不被归类为“热方法”它就不会被编译? 我有一些东西在脑后,我读到一个方法被认为是“热”,当它被执行至少10.000次(解释方法10.000次后,它将被编译),但我不得不承认我是不确定这个或我在哪里读到这个。 总结一下我的问题: (1)只要没有将每种方法归类为“热”方法(并因此已被编译),或者是否有理由使用方法进行编译,即使它们不是“热”的,也会解释每种方法吗? (2)JVM如何将方法分为“非热”和“热”方法? 执行次数? 还要别的吗? (3)如果“热”方法存在某些阈值(如执行次数),是否有Java标志( -XX:… )来设置此阈值?