为什么堆在java中发生了变化

时间:2013-07-04 10:49:20

标签: java heap-memory

我们正在启动java进程,-Xms等于-Xmx valuem,例如:

-Xms1500m -Xmx1500m -Dos.heap.max=1500m -verbose:gc -XX:MaxPermSize=256m 

由于某种原因,堆在运行时期间发生了变化......:

[GC 624542K->464935K(1472000K), 0.0647450 secs] Wed Jul 3 15:58:23 2013
[GC 808811K->813332K(1472000K), 0.1407890 secs] Wed Jul 3 15:58:23 2013
[Full GC 813332K->636599K(1472000K), 0.7913590 secs] Wed Jul 3 15:58:24 2013
[GC 1016090K->956043K(1258752K), 0.1209670 secs] Wed Jul 3 15:58:24 2013
[Full GC 956043K->955974K(1258752K), 0.4132560 secs] Wed Jul 3 15:58:25 2013
[Full GC 1126726K->1122269K(1258752K), 0.4376340 secs] Wed Jul 3 15:58:25 2013
[Full GC 1126726K->1115353K(1258752K), 0.8102960 secs] Wed Jul 3 15:58:26 2013

问题是堆内存在运行时发生变化的原因......?

1 个答案:

答案 0 :(得分:2)

我理解这个问题是为什么堆大小从1500米(1472000K)下降到更小(1258752K),即使初始大小设置为1500米。

事实证明,这是长期运行的JVM中众所周知的行为,并且与PS MarkSweep / Full GC机制有关 - 请参阅this article以获得良好的写作。

干杯,