L'outil Java Mission Control dans le JDK fournit des statistiques sur l'allocation d'objets dans le nouveau TLAB et les allocations en dehors de TLAB. (C'est sous Memory/Allocations). Quelle est la signification de ces statistiques, ce qui est bon pour les performances d'une application? Dois-je m'inquiéter si certains objets sont alloués en dehors de TLAB et si oui, que puis-je faire?
Un TLAB est un tampon d'allocation de thread local. La façon normale dont les objets sont alloués dans HotSpot se trouve dans un TLAB. Les allocations TLAB peuvent être effectuées sans synchronisation avec d'autres threads, car le tampon d'allocation est Thread Local, la synchronisation n'est nécessaire que lorsqu'un nouveau TLAB est récupéré.
Ainsi, le scénario idéal est que le plus possible des allocations soient effectuées dans les TLAB.
Certains objets seront alloués en dehors des TLAB, par exemple les gros objets. Il n'y a rien à craindre tant que le pourcentage d'allocations en dehors des TLAB par rapport aux allocations dans les nouveaux TLAB est faible.
Les TLAB sont redimensionnés dynamiquement pendant l'exécution pour chaque thread individuellement. Ainsi, si un thread alloue beaucoup, les nouveaux TLAB qu'il obtient du tas augmenteront de taille. Si vous le souhaitez, vous pouvez essayer de définir le drapeau -XX:MinTLABSize
pour définir la taille TLAB minimale, par exemple -XX:MinTLABSize=4k
Réponse fournie par mon collègue David Lindholm :)