works recolector how forzar example español como collector collection basura java solr garbage-collection

recolector - java garbage collector how it works



Recolección de basura: ¿cómo se calcula el espacio de Eden(y los demás tamaños de generación)? (1)

¿Por qué NewSize, MaxNewSize, OldSize y PermSize son tan pequeños cuando MaxHeapSize es grande?

Los tamaños son solo tan grandes como necesitan ser. NewSize será más grande si genera más basura de corta duración (no sé cómo se configura MaxNewSize, pero generalmente es más pequeño de lo que lo configuré)

generación simultánea de barrido de marcas

Tiene la capacity = tamaño máximo, used = usado, free = capacidad - usado.

ParNew mensajes en mi registro de GC, que entiendo es el GC para Eden.

Como ha notado, el nuevo espacio es pequeño, por lo que se limpia a menudo y el viejo generador es grande, por lo que se limpia muy poco o nada.

Necesito ayuda para entender cómo los números relacionados con GC que jmap de jmap y jstat relacionan con la configuración que paso a Java. Estoy iniciando la aplicación (solr) con la siguiente configuración en un servidor con 16 GB de memoria:

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -Xms12144m -Xmx12144m -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops

La salida de jmap comienza:

Concurrent Mark-Sweep GC Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 12733906944 (12144.0MB) NewSize = 2686976 (2.5625MB) MaxNewSize = 130809856 (124.75MB) OldSize = 5439488 (5.1875MB) NewRatio = 4 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 176160768 (168.0MB)

¿Por qué NewSize , MaxNewSize , OldSize y PermSize tan pequeños cuando MaxHeapSize es grande? ¿No debería NewSize + OldSize = heap size ? ¿Y no debería el tamaño del montón global aproximarse a MaxHeapSize ? ¿Por qué NewSize es exactamente la mitad de OldSize cuando NewRatio está configurado en 4?

El resto de la salida de jmap está debajo. Concuerda con lo anterior e incluye una concurrent mark-sweep generation sección que tampoco sé cómo interpretar.

Además, los registros de GC indican que el "tamaño de superviviente deseado" es de 6.2MB, lo que también es extraño dado que entiendo -XX:SurvivorRatio=8 debería hacer que el espacio del sobreviviente sea 1/8 de NewSize .

Finalmente, solo veo mensajes de ParNew en mi registro de GC, que entiendo es el CG para Eden.

Heap Usage: New Generation (Eden + 1 Survivor Space): capacity = 117768192 (112.3125MB) used = 20402232 (19.45708465576172MB) free = 97365960 (92.85541534423828MB) 17.324059793666528% used Eden Space: capacity = 104726528 (99.875MB) used = 16408336 (15.648208618164062MB) free = 88318192 (84.22679138183594MB) 15.667793359863893% used From Space: capacity = 13041664 (12.4375MB) used = 3993896 (3.8088760375976562MB) free = 9047768 (8.628623962402344MB) 30.624128945508794% used To Space: capacity = 13041664 (12.4375MB) used = 0 (0.0MB) free = 13041664 (12.4375MB) 0.0% used concurrent mark-sweep generation: capacity = 12603097088 (12019.25MB) used = 7903352408 (7537.22420501709MB) free = 4699744680 (4482.02579498291MB) 62.70960505037411% used Perm Generation: capacity = 45903872 (43.77734375MB) used = 27759192 (26.473228454589844MB) free = 18144680 (17.304115295410156MB) 60.472441191889% used