Сумма разбиения кучи Java не равна общей емкости кучи - PullRequest
0 голосов
/ 04 июля 2018

У меня есть процесс Netty, работающий с кучей 8 ГБ, используя Parallel GC с 4 потоками. Я пытаюсь проанализировать кучу и наблюдаемая сумма всей емкости, показанной в jmap, даже не близка к 8 ГБ, Old Gen - всего 1,5 ГБ, а Young Gen - 750 МБ.

Ниже выводится jmap -heap 7595

Attaching to process ID 7595, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 30
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 8589934592 (8192.0MB)
   NewSize                  = 88080384 (84.0MB)
   MaxNewSize               = 2863136768 (2730.5MB)
   OldSize                  = 176160768 (168.0MB)
   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 = 763363328 (728.0MB)
   used     = 418551600 (399.1619110107422MB)
   free     = 344811728 (328.8380889892578MB)
   54.8299328311459% used
From Space:
   capacity = 1048576 (1.0MB)
   used     = 458752 (0.4375MB)
   free     = 589824 (0.5625MB)
   43.75% used
To Space:
   capacity = 1048576 (1.0MB)
   used     = 0 (0.0MB)
   free     = 1048576 (1.0MB)
   0.0% used
PS Old Generation
   capacity = 1530396672 (1459.5MB)
   used     = 1196099760 (1140.6896209716797MB)
   free     = 334296912 (318.8103790283203MB)
   78.15619191309898% used

27146 interned Strings occupying 3164408 bytes.

[Емкость молодого поколения (728) + Емкость старого поколения (1459) = 2187 МБ] << 8 ГБ </p>

1 Ответ

0 голосов
/ 04 июля 2018

По умолчанию JVM не выделяет максимальную кучу после запуска, вместо этого меньшая начальная куча будет выделяться и расширяться, когда JVM будет нуждаться в этом. Вы можете установить начальный размер кучи равным 8 ГБ, используя флаг -Xms, например. -Xms8g согласно документам :

-Xmssize

Устанавливает начальный размер (в байтах) кучи. Это значение должно быть кратно 1024 и больше 1 МБ. Добавьте буквы k или K для обозначения килобайт, m или M для обозначения мегабайт, g или G для обозначения гигабайт.

...