2011-11-16 24 views
10

Khi bạn thực hiện new Object() trong Java, jvm có sử dụng thuật toán không khóa để cấp phát bộ nhớ hay không cần khóa?Phân bổ bộ nhớ trên JVM không khóa

JVM Tôi đang đề cập đến trong trường hợp này là Hotspot VM. Từ nhỏ tôi biết về nó, nó chỉ cần tăng một con trỏ để cấp phát bộ nhớ siêu nhanh. Nhưng trong trường hợp của nhiều chủ đề, không tăng yêu cầu khóa hoặc CAS?

Trả lời

6

như đã đề cập, mặc định là sử dụng tlab. Các behavious được mô tả trong this glossary như sau

TLAB 
Thread-local allocation buffer. Used to allocate heap space quickly without synchronization. Compiled code has a "fast path" of a few instructions which tries to bump a high-water mark in the current thread's TLAB, successfully allocating an object if the bumped mark falls before a TLAB-specific limit address. 

Chi tiết về kích thước trong this blog & tất cả các chi tiết bạn có thể muốn trong this blog.

Tóm lại đó là chuỗi địa phương trừ khi TLAB đầy, trong trường hợp đó bạn sẽ cần phải nhấn vào nhóm dùng chung và đây là một hoạt động CAS.

Một yếu tố phức tạp khác có thể là this bug mô tả chia sẻ sai trong đánh dấu thẻ không phải là khóa như vậy nhưng sẽ làm tổn thương hiệu suất (nếu đây là lý do bạn hỏi về khóa). Dường như điều này là cố định trong java7 mặc dù.

5

Nó phụ thuộc :) Tôi tin rằng nếu bạn sử dụng -XX:+UseTLAB option (đó là mặc định cho Sun/Oracle JVM như được ghi chú bởi Peter), nó sẽ được tranh chấp miễn phí trong "hạnh phúc đường dẫn" do thread-cục bộ đống . Tất nhiên, nếu yêu cầu thu gom rác do không có đủ không gian, chúng tôi vào lãnh thổ của các GC song song, nơi có nhiều triển khai khác nhau và tất cả đều rất phức tạp ... và tất nhiên, điều này luôn luôn thay đổi.

Ngay cả trong mô hình "đống đơn", tôi cho rằng phân bổ được tối ưu hóa cao - không thu được nhiều khóa theo nghĩa thông thường khi thực hiện gia số nguyên tử nếu có thể. Tôi không thể nói tôi biết chi tiết.

+1

+1: UseTLAB được bật theo mặc định trên Sun/Oracle JVM. –

+0

@PeterLawrey: Cảm ơn - đã chỉnh sửa một cách thích hợp. –

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