Lo strumento Controllo missione Java nel JDK fornisce statistiche sull'assegnazione degli oggetti nel nuovo TLAB e allocazioni all'esterno del TLAB. (È in memoria/allocazioni). Qual è il significato di queste statistiche, cosa è buono per le prestazioni di un'applicazione? Dovrei essere preoccupato se alcuni oggetti sono allocati al di fuori del TLAB e se sì, cosa posso fare al riguardo?Allocazioni in nuovo TLAB vs allocazioni all'esterno TLAB
risposta
Un TLAB è un buffer di allocazione locale del thread. Il modo normale in cui gli oggetti sono allocati in HotSpot è all'interno di un TLAB. Le allocazioni TLAB possono essere eseguite senza sincronizzazione con altri thread, poiché il buffer di allocazione è Thread locale, la sincronizzazione è necessaria solo quando viene recuperato un nuovo TLAB.
Quindi, lo scenario ideale è che il più possibile delle allocazioni sia fatto in TLAB.
Alcuni oggetti verranno allocati all'esterno dei TLAB, ad esempio oggetti di grandi dimensioni. Questo non è nulla di cui preoccuparsi fintanto che la percentuale di allocazioni al di fuori dei TLAB rispetto alle allocazioni nei nuovi TLAB è bassa.
I TLAB vengono ridimensionati dinamicamente durante l'esecuzione per ogni thread singolarmente. Quindi, se un thread si assegna molto, i nuovi TLAB che ottiene dall'heap aumenteranno di dimensioni. Se si vuole si può provare a impostare il flag -XX:MinTLABSize
per impostare dimensioni minime TLAB, ad esempio -XX:MinTLABSize=4k
risposta fornito dal mio collega David Lindholm :)
https://shipilev.net/jvm-anatomy-park/4-TLAB allocazione / – Vadzim