使用
之前分享过JVM的基础结构以及如果Jconsole去直观的去查看,现在我们更细的了解一个Jconsole的监控案例。
BigInteger[] pArr = new BigInteger[30000];
pArr[0] = new BigInteger("0");
pArr[1] = new BigInteger("1");
for (int i = 2; i < 30000; i++) {
pArr[i] = pArr[i - 1].add(pArr[i - 2]);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("第" + i + ":" + pArr[i]);
}
问题
一次次的堆内存使用量为什么有较大幅度的变化?
Old Genarition 现象能说明什么?
Eden Space 为什么会越往后越密集?
Survivor Space 为什么会下降?
修改
BigInteger temp1 = new BigInteger("0");
BigInteger temp2 = new BigInteger("1");
BigInteger temp3 = new BigInteger("0");
for (int i = 2; i < 10000; i++) {
temp3 = temp2;
temp2 = temp1.add(temp2);
temp1 = temp3;
try {
Thread.sleep(5);
} catch (Exception e) {
}
System.out.println("第" + i + ":" + temp2);
}
参考
Jconsole—JVM监控性能的利器(1 本地监控)
jconsole工具使用
使用jconsole分析内存情况-JVM