2014-10-14 16 views
34

Công cụ kiểm soát nhiệm vụ Java trong JDK cung cấp số liệu thống kê về phân bổ đối tượng trong TLAB mới và phân bổ bên ngoài TLAB. (Nó nằm trong Bộ nhớ/Phân bổ). Ý nghĩa của các thống kê này là gì, điều gì là tốt cho hiệu suất của một ứng dụng? Tôi có nên lo lắng nếu một số đối tượng được phân bổ bên ngoài TLAB và nếu có, tôi có thể làm gì với nó?Phân bổ trong TLAB mới so với phân bổ bên ngoài TLAB

+0

https://shipilev.net/jvm-anatomy-park/4-tlab-phân bổ / – Vadzim

Trả lời

66

TLAB là bộ đệm phân bổ địa phương chủ đề. Các đối tượng cách thông thường được cấp phát trong HotSpot nằm trong TLAB. Phân bổ TLAB có thể được thực hiện mà không đồng bộ hóa với các chủ đề khác, vì Bộ đệm phân bổ là Thread Local, đồng bộ hóa chỉ cần thiết khi một TLAB mới được tìm nạp.

Vì vậy, kịch bản lý tưởng là càng nhiều càng tốt các phân bổ được thực hiện trong TLAB.

Một số đối tượng sẽ được phân bổ bên ngoài TLAB, ví dụ như các đối tượng lớn. Điều này là không có gì phải lo lắng miễn là tỷ lệ phân bổ bên ngoài TLABs so với phân bổ trong TLABs mới là thấp.

Các TLAB được tự động định lại kích thước trong quá trình thực thi cho từng chuỗi riêng lẻ. Vì vậy, nếu một thread phân bổ rất nhiều, TLABs mới mà nó nhận được từ heap sẽ tăng kích thước. Nếu bạn muốn, bạn có thể cố gắng thiết lập cờ -XX:MinTLABSize để thiết lập kích thước TLAB tối thiểu, ví dụ -XX:MinTLABSize=4k

trả lời được cung cấp bởi đồng nghiệp của tôi David Lindholm :)

Các vấn đề liên quan