Je ne pouvais pas trouver une source complète qui permettrait d'expliquer le concept de manière claire. Ma compréhension est qu'un thread est donné une certaine partie de la mémoire dans l'eden où il alloue de nouveaux objets. Un autre thread va finir par avoir un peu consécutives morceau d'eden. Qu'advient-il si le premier thread s'exécute hors de la zone de libre dans son TLAB? Serait-il demander un nouveau morceau d'eden?
Réponse
Trop de publicités?L'idée d'un TLAB est de réduire le besoin de synchronisation entre les threads. À l'aide de TLABs, ce besoin est réduite comme n'importe quel thread a un endroit, il peut l'utiliser et s'attendre à ce que il est le seul thread à l'aide de cette zone. En supposant qu'une TLAB peut contenir 100 objets, un thread aurait seulement besoin d'acquérir un verrou pour réclamer plus de mémoire lors de l'attribution de la 101 de l'objet. Sans TLABs, ce qui serait requis pour chaque objet. L'inconvénient est bien sûr que vous pouvez potentiellement perdre de l'espace.
Les objets volumineux sont généralement attribuées à l'extérieur d'un TLAB comme ils annuler l'avantage de réduire la fréquence de synchronisation de l'allocation de mémoire. Certains objets ne pourraient même pas s'adapter à l'intérieur d'un TLAB.
Vous pouvez définir la taille d'un TLAB à l'aide de l' -XX:TLABSize
pavillon, mais en général, je ne vous recommande pas de jouer avec ces paramètres, sauf si vous avez vraiment découvert un problème que vous pouvez résoudre par qui.