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 :)
- 1. traccia allocazioni memoria C++
- 2. Come registrare le allocazioni con JFR sulla riga di comando?
- 3. Evitare allocazioni di oggetti in onDraw() (StaticLayout)?
- 4. Impossibile ottenere allocazioni su Android 4.4.4
- 5. Implementazione tabella/mappa hash senza allocazioni dinamiche
- 6. L'iteratore di lista causa allocazioni di heap?
- 7. Perché GC.GetTotalMemory() segnala allocazioni di memoria enormi?
- 8. allocazioni iOS - conteggio persistente in heapshots non sempre 0
- 9. Come trovare Objective-C Blocchi in allocazioni o perdite Instruments
- 10. Alternative a allocazioni dinamiche in progetti di sicurezza critici (C)
- 11. L'arresto anomalo dell'applicazione viene utilizzato con Strumento allocazioni
- 12. catch std :: allocazioni di funzioni al momento della compilazione
- 13. Utilizzo memoria alta virtuale + allocazioni basse su iOS
- 14. Come trovare la dimensione delle allocazioni statiche da binario?
- 15. Strumenti> Allocazioni che non mostrano classi/oggetti app
- 16. Utilizzo di boost :: pool per gestire le allocazioni di memoria in un std :: vector
- 17. UIViewController non presente in allocazioni in strumenti di analisi mucchio colpo
- 18. Allocazioni XCode Instruments: guarda Byte in tempo reale o Byte globali?
- 19. Come trovo tutte le allocazioni di memoria in un file di codice ir llm?
- 20. Esecuzione di pacchetti SSIS in allocazioni di memoria separate o aumento della dimensione del buffer predefinita?
- 21. Utilizzo di allocazioni dinamiche in un software mission-critical/life-critical
- 22. Come evitare allocazioni temporanee quando si utilizza la chiave complessa per HashMap?
- 23. Determinare dove si sono verificate le allocazioni dell'oggetto per gli oggetti nell'heap
- 24. Perché le allocazioni di stack molto grandi non riescono nonostante ulimit illimitato?
- 25. Esiste un sovraccarico di memoria associato alle allocazioni della memoria heap (ad esempio, marcatori nell'heap)?
- 26. Errore Xcode: "La libreria di tracciabilità delle allocazioni non è stata caricata nel tempo"
- 27. Nuovo (std :: nothrow) vs. Nuovo all'interno di un blocco try/catch
- 28. C'è un modo per convertire std :: vector <const T*> in std :: vector <T*> senza allocazioni aggiuntive?
- 29. URI.create() vs nuovo URI()
- 30. nuovo Numero() vs Numero()
https://shipilev.net/jvm-anatomy-park/4-TLAB allocazione / – Vadzim