【发布时间】:2013-04-30 10:41:54
【问题描述】:
我已经在我们正在运行的 Java 应用程序上运行了 jmap -heap 命令,这就是我得到的结果:
C:\Program Files\Java\jdk1.7.0_05\bin>jmap -heap 2384 正在附加到进程 ID 2384,请稍候... 调试器连接成功。 检测到服务器编译器。
JVM 版本为 23.1-b03
在新一代中使用并行线程。
使用线程局部对象分配。
并发 Mark-Sweep GC
堆配置:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
新大小 = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
新比率 = 2
幸存者比率 = 8
PermSize = 134217728 (128.0MB)
MaxPermSize = 201326592 (192.0MB)
G1HeapRegionSize = 0 (0.0MB)
堆使用:
新一代(伊甸园 + 1 个幸存者空间):
容量 = 228261888 (217.6875MB)
使用 = 203794000 (194.3531036376953MB)
免费 = 24467888 (23.334396362304688MB)
89.28078260703775% 已使用
伊甸园:
容量 = 202964992 (193.5625MB)
使用 = 198399360 (189.2083740234375MB)
免费 = 4565632 (4.3541259765625MB)
97.75053226913141% 已使用
来自太空:
容量 = 25296896 (24.125MB)
已使用 = 5394640 (5.1447296142578125MB)
免费 = 19902256 (18.980270385742188MB)
21.325304100550518% 已使用
去太空:
容量 = 25296896 (24.125MB)
已用 = 0 (0.0MB)
免费 = 25296896 (24.125MB)
0.0% 已使用
并发标记扫描生成:
容量 = 506445824 (482.984375MB)
使用 = 159479408 (152.09141540527344MB)
免费 = 346966416 (330.89295959472656MB)
31.489924576809226% 已使用
烫发一代:
容量 = 134217728 (128.0MB)
已使用 = 72157448 (68.81470489501953MB)
免费 = 62060280 (59.18529510498047MB)
53.76148819923401% 已使用
96874个interned Strings,占用89695496字节。
所以在 68mb 的 Permgen 中似乎有大约 89mb 的实习字符串。是否存在未存储在 Permgen 中的实习字符串?
【问题讨论】:
-
你为什么会关心?我怀疑你是在试图进行微观管理。
-
@HotLicks - 因为我们有一个 permgen OOM 异常,我试图排除字符串实习。当然还有好奇心 :)