2015-02-18 3 views
1

Я использую версию java «1.6.0_31» (я знаю старую версию). Я использую jmap -heap, чтобы просмотреть использование перментома моего процесса. Однако, когда я смотрю на выходе, я вижу эти строки, которые, кажется, чтобы сказать мне, что мое текущее использование permspace является 12MBget permgen space fom jmap

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) 

А потом на выходе я вижу эти строки, которые, кажется, говорят мне, что Я использовал около 20 МБ использования. Мой вопрос в том, почему эти два номера отличаются друг от друга. Что более важно? (Я не выхожу из Пермспространства, я просто пытаюсь понять выход).

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

ответ

1

Как вы можете видеть здесь

PermSize   = 12582912 (12.0MB) 
    MaxPermSize  = 67108864 (64.0MB) 

Ваш первоначальный размер PermGen является 12MB, но это может увеличить ДО 64Мб. Таким образом, когда и когда вы загружаете классы, использование PermGen будет расти, вот почему он поднялся с 12 до 20 МБ, и он будет продолжать увеличиваться до тех пор, пока он не достигнет максимальной емкости, а затем он бросит печально известный java.lang.OutOfMemoryError: PermGen space. Только что установленный

-XX:PermSize=128m и -XX:MaxPermSize=128m.

Причина установки одинакового значения заключается в том, чтобы избежать полного ГК при изменении размера

Смежные вопросы