1回复
4年前
JVM逃逸分析相关疑惑
开启逃逸分析,JVM参数:
-server -verbose:gc -XX:+DoEscapeAnalysis
不开启就是去掉后面的-XX:+DoEscapeAnalysis参数
主要代码
package com.cjt;
public class Test {
private static class Foo {
private int x;
private static int counter;
public Foo() {
x = (++counter);
}
}
public static void main(String[] args) {
long start = System.nanoTime();
for (int i = 0; i < 1000 * 1000 * 10; ++i) {
Foo foo = new Foo();
}
long end = System.nanoTime();
System.out.println("Time cost is " + (end - start));
}
}
最终结果是,无论上述JVM参数如何设置,JVM gc不变,没有出现网上那种“栈上分配对象,堆上gc不会发生”现象。gc日志如下:
[GC 30464K->616K(116800K), 0.0014522 secs]
[GC 31080K->568K(116800K), 0.0010129 secs]
[GC 31032K->600K(116800K), 0.0008023 secs]
[GC 31064K->552K(147264K), 0.0014494 secs]
Time cost is 57097349
不知是哪里出现问题,我也设置过-Xmx调整堆大小,没有作用。不太清楚网络上的文章都经过实践没有!
3066 阅读