2015-07-16 6 views
9

Ich habe durch die sun.misc.Unsafe-Klasse (openjdk6) gelesen, wie ich neugierig war, wie viele native Methoden es tatsächlich bezeichnet. Verständlicherweise gibt es eine große Anzahl von nativen Methoden in der Klasse, aber ich kann nicht finden, wo sie implementiert sind.Wo sind die nativen Methoden von sun.misc.Unsafe implementiert?

Ich habe durch die openjdk6-Repo grep'd und, während ich Implementierungen der nativen Methoden anderer Klasse finden kann, kann ich nicht finden Unsafe. Ich vermute, dass sie nicht openjdk Code sind, sondern stattdessen als Teil von Hotspot kompiliert werden?

Suche ich an der falschen Stelle innerhalb von openjdk oder sind sie tatsächlich in Hotspot implementiert? Referenzen auf ihren Standort würden sehr geschätzt werden.

+0

Hinweis: viele dieser Methoden sind intrinsics und daher werden die nativen Methoden eigentlich nicht aufgerufen, stattdessen kann die JVM Inline-Maschinencode-Anweisungen, die das gleiche tun. –

Antwort

9

Die OpenJDK-Versionen sind hier zu finden:

http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/4fc084dac61e/src/share/vm/prims/unsafe.cpp

http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/4fc084dac61e/src/share/vm/prims/unsafe.cpp

EDIT:

Wie the8472 das sind die nativen Implementierungen in Interpreter-Modus verwendet hingewiesen. Die meisten von ihnen haben intrinsic implementations im Hotspot. Diese header file listet die intrinsischen (Suche nach "sun_misc_Unsafe").

+1

Ich denke, das sind nur die JNI-Implementierungen, die vom Interpreter verwendet werden können. Die meisten "unsicheren" Methoden haben [intrinsics] (http://stackoverflow.com/a/29721720/1362755), die von den C1/C2-Compilern verwendet werden. – the8472

Verwandte Themen