Das Java Mission Control-Tool im JDK bietet Statistiken zur Objektzuordnung in neuen TLABs und Zuordnungen außerhalb von TLAB. (Es ist unter Speicher/Zuteilungen). Welche Bedeutung haben diese Statistiken, was ist gut für die Leistung einer Anwendung? Sollte ich mir Sorgen machen, wenn einige Objekte außerhalb von TLAB zugewiesen werden und wenn ja, was kann ich dagegen tun?Zuordnungen in neuen TLABs zu Zuweisungen außerhalb von TLAB
Antwort
Ein TLAB ist ein Thread Local Allocation Buffer. Die normale Zuweisung von Objekten in HotSpot erfolgt innerhalb eines TLAB. TLAB-Zuweisungen können ohne Synchronisierung mit anderen Threads ausgeführt werden, da der Zuordnungspuffer Thread Local ist. Die Synchronisierung wird nur benötigt, wenn ein neuer TLAB abgerufen wird.
So ist das ideale Szenario, dass so viel wie möglich der Zuordnungen in TLABs vorgenommen werden.
Einige Objekte werden außerhalb von TLABs zugewiesen, z. B. große Objekte. Solange der Prozentsatz der Zuweisungen außerhalb von TLABs gegenüber Zuweisungen in neuen TLABs gering ist, ist dies kein Grund zur Sorge.
Die TLABs werden während der Ausführung für jeden Thread einzeln dynamisch angepasst. Wenn also ein Thread sehr viel zuweist, werden die neuen TLABs, die er vom Heap erhält, größer. Wenn Sie möchten, können Sie versuchen, das Flag zu setzen -XX:MinTLABSize
Mindest TLAB Größe einzustellen, zum Beispiel -XX:MinTLABSize=4k
Antwort meines Kollegen David Lindholm bereitgestellt :)
https://shipilev.net/jvm-anatomy-park/4-tlb-Zuordnung / – Vadzim