2013-05-29 15 views
51

Kennt jemand eine umfassende Dokumentation zu sun.misc.Unsafe?Wo wird sun.misc.Unsafe dokumentiert?

This ist alles, was ich finden konnte. Kennt jemand eine bessere Quelle?

der Suche nach Javadoc für putOrderedInt nur

enter image description here

+5

Mein Verständnis der 'sun. *' Klassen ist, dass sie ** spezifisch ** undokumentiert/nicht unterstützt werden. Du solltest sie * nicht * benutzen, da es keine veröffentlichte API gibt, an die sie sich halten, oder Semantik, die sie garantieren. Daher ist es nicht verwunderlich, dass die einzige Dokumentation inoffiziell ist - Nutzung auf eigene Gefahr. –

+2

Beachten Sie - es soll in Java 9 entfernt werden - http://blog.dripstat.com/removal-of-sun-misc-unsafe-a-disaster-in-the-making – Eyal

+0

Das ist eine ziemlich inflammatorische Blog-Post. Es überrascht nicht, dass die "absolute Katastrophe", um die es hier geht, angegangen wird. Der [aktuelle Vorschlag] (http://openjdk.java.net/jeps/260) wird 'sun.misc.Unsafe' und einige andere Klassen wie' sun.misc.Signal' standardmäßig verfügbar lassen. – dimo414

Antwort

47

Es gibt einen schönen Post darüber auf mishadoff Blog zu finden: http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/. Die Klasse ist jedoch offiziell undokumentiert.

+10

Es gibt ziemlich viel Dokumentation an den Quellcode der Klasse angehängt: http://www.docjar.com/html/api/sun/misc/Unsafe.java.html –

+2

@raphw Dies ist für die OpenJDK obwohl, die Entwickler müssen offener sein als Oracle. Danke für den Link, es ist sehr praktisch. – jlr

+2

Andere JDKs bieten möglicherweise nicht einmal 'sun.misc.Unsafe', da es sich um eine interne Klasse handelt. Diese JDKs, die die Klasse bereitstellen, wählen jedoch normalerweise eine identische Implementierung. Sogar Android hat eine mit der gleichen "öffentlichen" API. –

6

In Bezug auf die putOrdered Methoden ..

Sie diese Methode aufrufe, kann das flüchtige Feld zu setzen, ohne einen flüchtigen Speicher mit .. Wenn Sie einen flüchtigen Speicher ausführen, haben Sie grundsätzlich eine Speicher-Speichersperre, die sicherstellt, dass Alle Speicheranweisungen vor der Barriere passieren vor der Barriere und dieser Speicher ist sichtbar, indem sichergestellt wird, dass die Daten an das Cache-Subsystem weitergegeben werden. Wenn Sie also den flüchtigen Speicher haben, müssen Sie warten, bis der Speicherpuffer erschöpft ist. Mit putOrdered thread executing wird nicht auf das Ablaufen des Speicherpuffers warten und dies kann die Performance verbessern. Als Konsequenz ist der gespeicherte Wert jedoch für andere Threads nicht sofort sichtbar ly ..

Wenn Sie einen Blick auf Atomic (oder andere Atom Klassen) haben eine Methode lazySet ist die putOrderedLong tatsächlich ausführt. Das Javadoc für diese Methode lautet:

Schließlich wird auf den angegebenen Wert festgelegt.

Verwandte Themen