当您启动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/

10-12 23:56