当您启动JVM时,在何处分配了PERM GEN?它是主要HEAP的一部分,还是HEAP大小之外的一部分。
例如,如果我使用以下参数:
-server -Xms10G -Xmx10G -XX:MaxPermSize=1536M
Java的总大小是Java的6G + 512M还是6.5G,还是HEAP内部的电烫生成设置,这意味着所有正在运行的应用程序的年轻/终身使用(又名OLD)和Perm将具有6G-512M = 5.5MB ?
图4中的图形显示了“调整世代大小”似乎暗示它可能不在HEAP范围内,但是我似乎找不到确定该声明的某些内容。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
查看jstat的输出,似乎它位于主HEAP的外部,但这可能只是它的报告方式。
[jboss@pts03-taps-03 ~]$ jstat -gccapacity PID
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
85184.0 85184.0 85184.0 8512.0 8512.0 68160.0 10400576.0 10400576.0 10400576.0 10400576.0 21248.0 1572864.0 1387840.0 1387840.0 431 43
OGCMX = 10400576.0 (almost 10G OLD GEN)
NGCMX = 85184.0 (OGCMX + NGCMX = very close to 10G NEW GEN)
PGCMX = 1572864.0 (1.5G PERM GEN)
如果可能的话,请提供一个指向说明事实的文档的链接。
最佳答案
-服务器-Xms10G -Xmx10G -XX:MaxPermSize = 1536M
堆和perm gen的总数将是11.5 GB。但是还有其他存储区域,例如直接内存可能一样大。另一个领域是共享库,基本上是固定大小的。
例如你可以设置
-mx128m -XX:MaxPermSize = 1g
如果perm gen增大了堆大小,则将失败。
关于java - Java PERM生成在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5968909/