2015-07-16 2 views
9

J'ai lu la classe sun.misc.Unsafe (openjdk6) car j'étais curieux de connaître le nombre de méthodes natives auxquelles elle faisait référence. Naturellement, il existe un grand nombre de méthodes natives dans la classe, mais je n'arrive pas à trouver où elles sont implémentées. J'ai grep'd à travers le repo openjdk6 et, bien que je puisse trouver des implémentations de méthodes natives d'autres classes, je ne peux pas trouver Unsafe. Je suppose qu'ils ne sont pas openjdk code mais sont compilés dans le cadre de hotspot? Est-ce que je cherche au mauvais endroit dans openjdk ou sont-ils effectivement mis en application dans le hotspot? Les références à leur emplacement seraient grandement appréciées.Où sont implémentées les méthodes natives de sun.misc.Unsafe?

+0

Note: beaucoup de ces méthodes sont intrinsèques et donc les méthodes natives ne sont pas réellement appelées, à la place la JVM sait intégrer des instructions de code machine qui font la même chose. –

Répondre

9

Les versions OpenJDK peuvent être trouvés ici:

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:

Comme l'ont souligné the8472 ce sont les implémentations natives utilisées en mode interprète. La plupart d'entre eux ont intrinsic implementations dans le hotspot. Cette header file liste les intrinsèques (recherchez "sun_misc_Unsafe").

+1

Je pense que c'est juste les implémentations JNI, qui pourraient être utilisées par l'interpréteur. La plupart des méthodes 'Unsafe' ont des [intrinsics] (http://stackoverflow.com/a/29721720/1362755) utilisées par les compilateurs C1/C2. – the8472