Я столкнулся с этим странным поведением в java GC.Java Garbage Collector нечетное поведение
У нас есть приложение с максимальной кучей 1 ГБ, и это привело к превышению предельных значений предельных значений на GC.
Здесь следует выход jmap -heap;
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 1610612736 (1536.0MB) NewSize = 1572864 (1.5MB) MaxNewSize = 536870912 (512.0MB) OldSize = 1072168960 (1022.5MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 37224448 (35.5MB)
used = 34328776 (32.73847198486328MB)
free = 2895672 (2.7615280151367188MB)
92.2210478446853% used
From Space:
capacity = 1572864 (1.5MB)
used = 786432 (0.75MB)
free = 786432 (0.75MB)
50.0% used
To Space:
capacity = 1572864 (1.5MB)
used = 0 (0.0MB)
free = 1572864 (1.5MB)
0.0% used
PS Old Generation
capacity = 1072168960 (1022.5MB)
used = 13918336 (13.2735595703125MB)
free = 1058250624 (1009.2264404296875MB)
1.2981476352383863% used
Итак, мы настроили GC со следующими параметрами;
-XX:NewSize=512 -XX:MaxNewSize=512 -XX:SurvivorRatio=16 -XX:NewRatio=1
NewSize и MaxNewSize должны были быть установлены в мегабайтах.
Но с этой конфигурацией мы получаем следующую карту кучи.
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 2147483648 (2048.0MB) NewSize = 1572864 (1.5MB) MaxNewSize = 1572864 (1.5MB) OldSize = 1072168960 (1022.5MB) NewRatio = 1 SurvivorRatio = 16 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 524288 (0.5MB)
used = 200200 (0.19092559814453125MB)
free = 324088 (0.30907440185546875MB)
38.18511962890625% used
From Space:
capacity = 524288 (0.5MB)
used = 98304 (0.09375MB)
free = 425984 (0.40625MB)
18.75% used
To Space:
capacity = 524288 (0.5MB)
used = 0 (0.0MB)
free = 524288 (0.5MB)
0.0% used
PS Old Generation
capacity = 1072168960 (1022.5MB)
used = 522704656 (498.49000549316406MB)
free = 549464304 (524.0099945068359MB)
48.752078776837564% used
Теперь пространство емкости Eden только 0.5Мб, но он использует только 38% из которых ранее было 92%, а мощность составляла 35MB. И использование старого поколения увеличилось до 50%, что было ранее около 2%.
Может кто-нибудь объяснить, почему GC ведет себя так?
* «NewSize и MaxNewSize должны были быть установлены в МБ». * - Тогда почему вы не устанавливаете их в МБ? – the8472
Мы уже установили их. Но хочу знать причину этого вышеупомянутого поведения. –
Какова общая доступная системная память и какие значения вы задали для -Xms и -Xmx – ravthiru