我有一个存储大量数据的java程序,我试着用以下VM参数运行它:-XX:+ PrintGCDetails
关于程序关闭,它打印出来:
Heap
PSYoungGen total 238016K, used 100138K [0x00000000eaeb0000, 0x00000000fd460000, 0x0000000100000000)
eden space 224640K, 38% used [0x00000000eaeb0000,0x00000000f0378dc0,0x00000000f8a10000)
from space 13376K, 99% used [0x00000000fbd50000,0x00000000fca51a60,0x00000000fca60000)
to space 10240K, 0% used [0x00000000fca60000,0x00000000fca60000,0x00000000fd460000)
PSOldGen total 92608K, used 88569K [0x00000000c0c00000, 0x00000000c6670000, 0x00000000eaeb0000)
object space 92608K, 95% used [0x00000000c0c00000,0x00000000c627e660,0x00000000c6670000)
PSPermGen total 64256K, used 64244K [0x00000000bba00000, 0x00000000bf8c0000, 0x00000000c0c00000)
object space 64256K, 99% used [0x00000000bba00000,0x00000000bf8bd300,0x00000000bf8c0000)
我假设99%(和95%)使用过的部分表明我需要做一些调整。我只是不确定是什么。
答案 0 :(得分:1)
好的前99%都很好:
来自太空13376K,99%使用
这就是年轻一代的GC如何运作。对象从次要GC上的Eden到Survivor空间(从空间和到空间),从主要GC上的幸存者到老一代。
第二个:
对象空间92608K,95%使用
是你应该担心的事情。老一代根据你的日志有大约100MB的空间,这通常太少,但取决于你执行的代码。
你应该更多地测量你的程序以获得准确的结果,但似乎你仍然在创建一些长寿命的对象,这些对象在旧一代中堆积。