2012-02-24 26 views
19

Tôi tiếp tục đọc về cách khóa thiên vị, sử dụng cờ -XX: + UseBiasedLocking, có thể cải thiện hiệu suất của đồng bộ hóa không được giám sát. Tôi không thể tìm thấy một tham chiếu đến những gì nó làm và làm thế nào nó cải thiện hiệu suất.Khóa thiên vị trong java

Bất cứ ai có thể giải thích cho tôi chính xác nó là gì hoặc có thể chỉ cho tôi một số liên kết/tài nguyên giải thích?

Trả lời

26

Về cơ bản, nếu đối tượng của bạn bị khóa chỉ bằng một sợi, VM có thể làm cho một tối ưu hóa và " thiên vị "đối tượng đó cho chủ đề đó theo cách mà các hoạt động nguyên tử tiếp theo trên đối tượng không chịu chi phí đồng bộ hóa. Tôi cho rằng điều này thường được hướng tới mã quá bảo thủ thực hiện khóa trên các đối tượng mà không bao giờ phơi bày chúng với một chuỗi khác. Chi phí đồng bộ hóa thực tế sẽ chỉ khởi động khi một luồng khác cố gắng lấy khóa trên đối tượng.

Đó là theo mặc định trong Java 6.

-XX: + UseBiasedLocking Cho phép một kỹ thuật để cải thiện hiệu suất của đồng bộ hóa uncontended. Một đối tượng là "thiên vị" đối với luồng mà đầu tiên mua lại màn hình của nó thông qua một bytecode của trình giám sát hoặc lời gọi phương thức đồng bộ; các hoạt động liên quan đến màn hình tiếp theo do luồng đó thực hiện tương đối nhanh hơn trên các máy đa xử lý. Một số ứng dụng với số lượng đáng kể đồng bộ hóa không được giám sát có thể đạt được tốc độ đáng kể với cờ này được bật; một số ứng dụng có kiểu khóa nhất định có thể thấy sự chậm lại, mặc dù các nỗ lực đã được thực hiện để giảm thiểu tác động tiêu cực.

5

Điều này có trả lời câu hỏi của bạn không?

http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5

Cho phép một kỹ thuật để cải thiện hiệu suất của uncontended đồng bộ hóa. Một đối tượng là "thiên vị" đối với các sợi mà đầu tiên mua lại màn hình của nó thông qua một bytecode monitorenter hoặc đồng bộ phương pháp gọi; các hoạt động liên quan đến màn hình tiếp theo được thực hiện bởi luồng đó tương đối nhanh hơn trên các máy đa bộ xử lý. Một số ứng dụng có số tiền đáng kể không đồng ý đồng bộ hóa có thể đạt được tốc độ đáng kể với cờ này được kích hoạt ; một số ứng dụng có kiểu khóa nhất định có thể thấy số lần giảm tốc , mặc dù đã thực hiện các nỗ lực để giảm thiểu tác động tiêu cực .

Mặc dù tôi cho rằng bạn sẽ thấy nó được bật theo mặc định trong 1.6. Sử dụng tùy chọn chẩn đoán PrintFlagsFinal để xem các cờ hiệu quả là gì. Hãy chắc chắn rằng bạn chỉ định -server nếu bạn đang điều tra cho một ứng dụng máy chủ vì những lá cờ có thể khác nhau:

http://www.jroller.com/ethdsy/entry/print_all_jvm_flags

3

Tôi đã tự hỏi về bản thân khóa thiên vị. Tuy nhiên có vẻ như ổ khóa thiên vị của java chậm hơn trên bộ vi xử lý nehalem của intel so với ổ khóa thông thường, và có lẽ là trên hai thế hệ vi xử lý kể từ nehalem.Xem http://mechanical-sympathy.blogspot.com/2011/11/java-lock-implementations.html và đây http://www.azulsystems.com/blog/cliff/2011-11-16-a-short-conversation-on-biased-locking

Cũng biết thêm thông tin ở đây https://blogs.oracle.com/dave/entry/biased_locking_in_hotspot

Tôi đã hy vọng rằng có một số cách tương đối rẻ để thu hồi một khóa sai lệch trên intel, nhưng tôi bắt đầu tin rằng không phải là khả thi. Các bài viết tôi đã thấy về cách nó được thực hiện dựa trên một trong hai: 1) sử dụng hệ điều hành để dừng thread 2) gửi tín hiệu, tức là mã đang chạy trong chủ đề khác 3) có các điểm an toàn được đảm bảo chạy khá thường trong các chủ đề khác và chờ đợi cho một được thực hiện (đó là những gì java nào). 4) có các điểm an toàn tương tự gọi là trả lại - và chủ đề khác MODIFIES MÃ đến một điểm ngắt ...

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