2014-10-14 5 views
34

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

+0

https://shipilev.net/jvm-anatomy-park/4-tlb-Zuordnung / – Vadzim

Antwort

66

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