我使用的是java版“1.6.0_31”(我知道旧版本)。我使用jmap -heap来查看我的进程的permgen用法。但是,当我查看输出时,我看到这些行,这似乎告诉我当前的permspace使用量是12MB
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 209715200 (200.0MB)
NewSize = 1048576 (1.0MB)
MaxNewSize = 4294901760 (4095.9375MB)
OldSize = 4194304 (4.0MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 12582912 (12.0MB)
MaxPermSize = 67108864 (64.0MB)
然后在输出中我看到这些线条,这似乎告诉我,我使用了大约20MB的烫发。我的问题是,为什么这两个数字彼此不同。哪个更相关? (我没有耗尽Permspace,我只是想了解输出)。
Perm Generation:
capacity = 20447232 (19.5MB)
used = 20246088 (19.30817413330078MB)
free = 201144 (0.19182586669921875MB)
答案 0 :(得分:1)
正如你在这里看到的那样
PermSize = 12582912 (12.0MB)
MaxPermSize = 67108864 (64.0MB)
您的初始PermGen大小为12MB,但可以增加到64MB。因此,当您加载类时,PermGen的使用率会上升,这就是它从12MB上升到20MB的原因,并且它会继续增加直到达到最大容量然后它会抛出臭名昭着的java.lang.OutOfMemoryError: PermGen space
。
只需设置
-XX:PermSize=128m
和-XX:MaxPermSize=128m
。
设置相同值的原因是为了在调整大小时避免使用完整的GC