为啥堆在java中发生变化
Posted
技术标签:
【中文标题】为啥堆在java中发生变化【英文标题】:Why the heap is changing in java为什么堆在java中发生变化 【发布时间】:2013-07-02 08:17:34 【问题描述】:例如,我们使用 -Xms 等于 -Xmx valuem 来启动 java 进程:
-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
问题是为什么堆内存在运行时会发生变化...?
【问题讨论】:
问题是为什么堆正在改变...... :) question is why the heap is changed... :) 把它写在问题中而不是 cmets 你是对的......我的错:) 所以你希望堆是静态的? 我认为这是一个有效的问题 - 为什么堆大小会下降到小于初始大小?看到这个帖子:java-monitor.com/forum/showthread.php?t=427 【参考方案1】:我理解问题是为什么堆大小从 1500m (1472000K) 下降到更小的 (1258752K),即使初始大小设置为 1500m。
事实证明,这是在长时间运行的 JVM 中众所周知的行为,并且与 PS MarkSweep / Full GC 机制有关 - 请参阅 this article 以获得良好的说明。
干杯,
【讨论】:
以上是关于为啥堆在java中发生变化的主要内容,如果未能解决你的问题,请参考以下文章
如果 java 是按值传递的,为啥我的对象在执行方法后会发生变化?