2015-07-16 23 views
9

Ho letto la classe sun.misc.Unsafe (openjdk6) perché ero curioso di sapere quanti metodi nativi a cui si riferiva effettivamente. Comprensibilmente, ci sono molti metodi nativi nella classe, tuttavia non riesco a trovare dove sono implementati.Dove sono implementati i metodi nativi di sun.misc.Unsafe?

Ho iniziato con il repo openjdk6 e, mentre sono in grado di trovare le implementazioni dei metodi nativi di altre classi, non riesco a trovare quello di Unsafe. Sto indovinando che non sono codice openjdk ma invece sono compilati come parte di hotspot?

Sto cercando nel posto sbagliato all'interno di openjdk o sono effettivamente implementati in hotspot? I riferimenti alla loro posizione sarebbero molto apprezzati.

+0

Nota: molti di questi metodi sono intrinsechi e quindi i metodi nativi non vengono effettivamente chiamati, invece la JVM sa di istruzioni di codice macchina in linea che fanno la stessa cosa. –

risposta

9

Le versioni OpenJDK possono essere trovate qui:

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:

Come sottolineato da the8472 queste sono le implementazioni native utilizzate in modalità interprete. La maggior parte di questi ha intrinsic implementations in hotspot. Questo header file elenca quelli intrinseci (cercare "sun_misc_Unsafe").

+1

Penso che siano solo le implementazioni JNI, che potrebbero essere usate dall'interprete. Molti metodi 'Unsafe' hanno [intrinsics] (http://stackoverflow.com/a/29721720/1362755) usati dai compilatori C1/C2. – the8472