执行GC后,为什么分配的永久代的大小会增加?

时间:2013-07-26 09:38:06

标签: java garbage-collection jvm heap-memory permgen

以下是我从jvisualvm执行执行GC 后拍摄的快照。 Heap StatsPermgen Stats

第一张图片是Heap stats,第二张图片是perm gen stats。我无法理解当GC 利用堆大小减少(如预期的那样)但永久代的分配大小增加(尽管使用的permgen大小保持不变)。What could be the possible explanation of such behavior? < / p>

使用JVM参数

-Xbootclasspath/p:../xyz.jar
-Xbootclasspath/a:../abc.jar
-Djava.endorsed.dirs=../resolver
-Djava.library.path=../framework
-Djavax.management.builder.initial=JBeanServerBuilder
-Djavax.net.ssl.trustStore=../certs
-Dorg.mortbay.log.class=JettyLogger
-Xms128m
-Xmx256m
-Xdebug
-Xnoagent
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=2000

注意:出于正当原因,我更改了名称(ex xyz.jar)。

JVm信息:

JVM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04, mixed mode)
Java: version 1.7.0_11, vendor Oracle Corporation
Java Home: /home/aniket/jdk1.7.0_11/jre
JVM Flags: <none>

2 个答案:

答案 0 :(得分:3)

  • 内存分配Heap / Perm / Eden / Young / S1 / S2等空间取决于用于GC的基础算法。
  • 以上空格的内存分配未定义为绝对值参数。它们被定义为JVM可用的总堆/ perm的比率。
  • 以上两点可能指出,当堆大小发生变化时,将重新评估所有空间的所有内存分配,以保持定义的比率。

以下链接非常有用:

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

答案 1 :(得分:1)

由于没有人提供答案,我将评论作为答案,尽管它有点模糊:

我猜测GC会重新评估它作为集合运行的一部分控制的各种大小。所以它可能会决定它在某些方面对某些东西有点紧张而且会增加它。