1

我正在使用 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 的 perm 使用量。我的问题是,为什么这两个数字彼此不同。哪个更相关?(我没有用完 Permspace,我只是想了解输出)。

Perm Generation:
 capacity = 20447232 (19.5MB)
   used     = 20246088 (19.30817413330078MB)
   free     = 201144 (0.19182586669921875MB)
4

1 回答 1

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

于 2015-02-18T19:05:07.987 回答