java performance garbage-collection jvm jmc

java - Asignaciones en nuevas asignaciones de TLAB frente a TLAB



performance garbage-collection (1)

La herramienta de Control de Misión de Java en el JDK proporciona estadísticas sobre la asignación de objetos en TLAB nuevos y asignaciones fuera de TLAB. (Está en Memoria / Asignaciones). ¿Cuál es el significado de estas estadísticas, qué es bueno para el rendimiento de una aplicación? ¿Debería preocuparme si se asignan algunos objetos fuera de TLAB y, en caso afirmativo, qué puedo hacer al respecto?


Un TLAB es un Buffer de asignación local de subprocesos. La forma normal en que se asignan los objetos en HotSpot está dentro de un TLAB. Las asignaciones de TLAB pueden realizarse sin sincronización con otros subprocesos, ya que el Buffer de asignación es un subproceso local, la sincronización solo es necesaria cuando se obtiene un TLAB nuevo.

Por lo tanto, el escenario ideal es que la mayor cantidad posible de las asignaciones se realicen en los TLAB.

Algunos objetos se asignarán fuera de TLAB, por ejemplo, objetos grandes. Esto no es nada de lo que preocuparse, siempre que el porcentaje de asignaciones fuera de los TLAB frente a las asignaciones en los TLAB nuevos sea bajo.

Los TLAB se redimensionan dinámicamente durante la ejecución de cada hilo individualmente. Por lo tanto, si un subproceso asigna mucho, los TLAB nuevos que obtiene del almacenamiento aumentarán de tamaño. Si lo desea, puede intentar configurar el indicador -XX:MinTLABSize para establecer el tamaño mínimo de TLAB, por ejemplo -XX:MinTLABSize=4k

Respuesta proporcionada por mi colega David Lindholm :)