2013-05-29 30 views
51

Có ai biết tài liệu toàn diện về số sun.misc.Unsafe không?Địa chỉ sun.misc.Unsafe được viết ở đâu?

This là tất cả những gì tôi có thể tìm thấy. Có ai biết về một nguồn tốt hơn?

Looking for Javadoc cho putOrderedInt chỉ để tìm

enter image description here

+5

Sự hiểu biết của tôi về các lớp 'sun. *' Là chúng được ** cụ thể ** không có giấy tờ/không được hỗ trợ. Bạn không nên * sử dụng chúng, trong đó không có API được xuất bản mà họ đồng ý tuân thủ hoặc ngữ nghĩa mà họ đảm bảo sẽ giữ. Như vậy không có gì đáng ngạc nhiên khi tài liệu duy nhất không chính thức - sử dụng có nguy cơ của riêng bạn. –

+2

Lưu ý - nó phải được loại bỏ trong Java 9 - http://blog.dripstat.com/removal-of-sun-misc-unsafe-a-disaster-in-the-making – Eyal

+0

Đó là một bài đăng blog khá viêm. Không có gì đáng ngạc nhiên, "sự thảm khốc tuyệt đối" mà bài viết đang lo sợ đang được giải quyết. [Đề xuất hiện tại] (http://openjdk.java.net/jeps/260) sẽ để lại 'sun.misc.Unsafe' và một số lớp khác, như' sun.misc.Signal', có sẵn theo mặc định. – dimo414

Trả lời

47

Có một bài tốt đẹp về nó trên mishadoff blog ở đây: http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/. Lớp học chính thức là không có giấy tờ.

+10

Có khá nhiều tài liệu gắn liền với mã nguồn của lớp: http://www.docjar.com/html/api/sun/misc/Unsafe.java.html –

+2

@raphw Đây là dành cho OpenJDK, devs phải cởi mở hơn Oracle. Cảm ơn các liên kết, nó rất tiện dụng. – jlr

+2

Các JDK khác có thể thậm chí không cung cấp 'sun.misc.Unsafe' vì nó là một lớp bên trong. Thos JDKs mà nhà cung cấp lớp thường chọn một thực hiện giống hệt nhau, mặc dù. Ngay cả Android cũng có một API "công khai" giống hệt nhau. –

6

Về putOrdered phương pháp ..

Bạn có thể gọi phương pháp này để thiết lập các lĩnh vực không ổn định mà không sử dụng một cửa hàng ổn định .. Nếu bạn thực hiện một cửa hàng ổn định, về cơ bản bạn có một rào cản bộ nhớ lưu trữ trong đó đảm bảo rằng tất cả các lệnh lưu trữ trước hàng rào, xảy ra trước hàng rào và bộ nhớ đó có thể nhìn thấy bằng cách đảm bảo dữ liệu được truyền đến hệ thống phụ bộ nhớ cache .. Vì vậy, khi bạn có cửa hàng dễ bay hơi, bạn phải đợi cho bộ đệm cửa hàng thoát ra .. Với putOrdered thực thi luồng sẽ không chờ cho bộ đệm cửa hàng thoát ra và điều này có thể cải thiện hiệu suất .. Tuy nhiên, do giá trị được lưu trữ hậu quả sẽ không hiển thị với các chuỗi khác ngay lập tức ly ..

Nếu bạn có một cái nhìn vào AtomicLong (hoặc các lớp nguyên tử) có một lazySet phương pháp mà thực sự thực hiện putOrderedLong. Javadoc trên phương pháp này là:

Cuối cùng đặt thành giá trị đã cho.

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