2014-10-14 8 views
34

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

+0

https://shipilev.net/jvm-anatomy-park/4-TLAB allocazione / – Vadzim

risposta

66

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 :)

Problemi correlati