2020-10-03: ¿Cuál es la diferencia entre satb y tlab en java?

Respuesta Fu Ge 2020-10-03: # 福 大 Architects Daily One Question #

Respuesta simple:
satb: instantánea al principio, instantánea.
tlab: búfer de asignación local de subprocesos, búfer de asignación local de subprocesos.

Respuesta intermedia:
satb: instantánea al principio, instantánea.
El proceso de marcado consiste en atravesar el montón para marcar el objeto vivo, utilizando un algoritmo de marcado de tres colores. Los tres colores son blanco (lo que indica que no se ha accedido), gris (se accedió pero las referencias que utiliza no se han escaneado completamente), negro ( El acceso y las referencias utilizadas se han escaneado por completo), todo el algoritmo de marcado de tres colores es atravesar el montón desde las raíces del GC y marcar el blanco como gris para los objetos alcanzables, y luego marcar el gris como negro; una vez que se completa el recorrido, todo es accesible Los objetos son todos negros y todos los blancos son reciclables.
SATB solo realiza "instantáneas" (todas marcadas como accesibles al inicio de la marca) al comienzo de la marca, pero la modificación simultánea puede hacer que el objeto pierda la marca, como
①. Un objeto blanco se referencia nuevamente al negro y luego al objeto gris Elimine la referencia al objeto blanco, lo que provocará que el objeto blanco pierda la marca.
②. Un objeto blanco se hace referencia nuevamente al negro, y luego un objeto blanco que hace referencia al objeto blanco se elimina del objeto gris, lo que también hará que el objeto blanco pierda la marca.
③. Un objeto blanco nuevo se hace referencia al negro, y ningún otro objeto gris hace referencia al objeto blanco, lo que también hará que el objeto blanco pierda la marca.
Con respecto al problema de la marca faltante que puede ocurrir cuando el algoritmo de tres colores es concurrente, en la fase de marcado de SATB, el objeto de referencia objetivo eliminado del objeto gris se marca como gris y el objeto recién generado referenciado por negro se marca como negro; La instantánea se toma al principio, por lo que es posible que exista basura flotante.

tlab: búfer de asignación local de subprocesos, búfer de asignación local de subprocesos.
La acción de asignación de memoria se divide en diferentes espacios según los subprocesos, es decir, cada subproceso preasigna una pequeña parte de la memoria privada en el montón de Java, es decir, el búfer de asignación de subprocesos local (búfer de asignación local de subprocesos, TLAB). La JVM se inicializa cuando se inicializa el subproceso. Al mismo tiempo, también se solicitará una parte de la memoria de un tamaño específico, que solo es utilizada por el subproceso actual, de modo que cada subproceso tenga un búfer separado. Si es necesario asignar memoria, colóquela en su propio búfer, de modo que no haya competencia, lo que puede Mejorar la eficiencia de la asignación Cuando la capacidad del búfer no sea suficiente, solicitar otra pieza de la zona de Edén para seguir usándola.
El propósito de TLAB es permitir que cada subproceso de aplicación Java utilice su propio puntero de asignación dedicado para asignar espacio al asignar espacio de memoria para nuevos objetos, reduciendo la sobrecarga de sincronización.
TLAB solo permite que cada subproceso tenga un puntero de asignación privado, pero el espacio de memoria del objeto subyacente aún es accesible para todos los subprocesos, pero otros subprocesos no pueden asignarse en esta área. Cuando una TLAB está llena (la parte superior del puntero de asignación alcanza el límite de asignación), se solicita una nueva TLAB.


comentario

Supongo que te gusta

Origin blog.csdn.net/weixin_48502062/article/details/108913753
Recomendado
Clasificación