Top Description Inners Fields Constructors Methods
jdk.internal.loader

public final Class NativeLibraries

extends Object
Class Inheritance
Imports
jdk.internal.misc.VM, jdk.internal.ref.CleanerFactory, jdk.internal.util.StaticProperty, java.io.File, .IOException, java.security.AccessController, .PrivilegedAction, java.util.ArrayDeque, .Deque, .Map, .Set, java.util.function.BiFunction, .Function, java.util.concurrent.ConcurrentHashMap, java.util.concurrent.locks.ReentrantLock

Native libraries are loaded via System#loadLibrary(String), System#load(String), Runtime#loadLibrary(String) and Runtime#load(String). They are caller-sensitive. Each class loader has a NativeLibraries instance to register all of its loaded native libraries. System::loadLibrary (and other APIs) only allows a native library to be loaded by one class loader, i.e. one NativeLibraries instance. Any attempt to load a native library that has already been loaded by a class loader with another class loader will fail.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class
pack-priv static class
private static class
pack-priv static class
NativeLibraries.NativeLibraryImpl

NativeLibraryImpl denotes a loaded native library instance.

pack-priv static class

Field Summary

Modifier and TypeField and Description
private final Class<?>
private final Map<String, NativeLibraries.NativeLibraryImpl>
private static final Set<String>
private final ClassLoader
private static final boolean
private static final Map<String, NativeLibraries.CountedLock>
private final boolean

Constructor Summary

AccessConstructor and Description
private
NativeLibraries(ClassLoader loader, Class<?> caller, boolean searchJavaLibraryPath)

Method Summary

Modifier and TypeMethod and Description
private static void
public long
find(String name)

private static native String
private NativeLibrary
findFromPaths(String[] paths, Class<?> fromClass, String name)

private static Class<?>
private static native boolean
load(NativeLibraries.NativeLibraryImpl impl, String name, boolean isBuiltin, boolean throwExceptionIfFail)

public NativeLibrary
loadLibrary(Class<?> fromClass, File file)

private NativeLibrary
loadLibrary(Class<?>
the caller class calling System::loadLibrary
fromClass
,
String
library name
name
,
boolean
built-in library
isBuiltin
)

Returns a NativeLibrary of the given name.

public NativeLibrary
loadLibrary(String
library name
name
)

Loads a native library from the system library path and java library path.

public NativeLibrary
loadLibrary(Class<?>
the caller class calling System::loadLibrary
fromClass
,
String
library name
name
)

Loads a native library from the system library path and java library path.

public static NativeLibraries
newInstance(ClassLoader loader)

Creates a NativeLibraries instance for loading JNI native libraries via for System::loadLibrary use.

private static void
private static native void
unload(String name, boolean isBuiltin, long handle)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

callerback to summary
private final Class<?> caller
librariesback to summary
private final Map<String, NativeLibraries.NativeLibraryImpl> libraries
loadedLibraryNamesback to summary
private static final Set<String> loadedLibraryNames
loaderback to summary
private final ClassLoader loader
loadLibraryOnlyIfPresentback to summary
private static final boolean loadLibraryOnlyIfPresent
nativeLibraryLockMapback to summary
private static final Map<String, NativeLibraries.CountedLock> nativeLibraryLockMap
searchJavaLibraryPathback to summary
private final boolean searchJavaLibraryPath

Constructor Detail

NativeLibrariesback to summary
private NativeLibraries(ClassLoader loader, Class<?> caller, boolean searchJavaLibraryPath)

Method Detail

acquireNativeLibraryLockback to summary
private static void acquireNativeLibraryLock(String libraryName)
findback to summary
public long find(String name)
findBuiltinLibback to summary
private static native String findBuiltinLib(String name)
findFromPathsback to summary
private NativeLibrary findFromPaths(String[] paths, Class<?> fromClass, String name)
getFromClassback to summary
private static Class<?> getFromClass()
loadback to summary
private static native boolean load(NativeLibraries.NativeLibraryImpl impl, String name, boolean isBuiltin, boolean throwExceptionIfFail)
loadLibraryback to summary
public NativeLibrary loadLibrary(Class<?> fromClass, File file)
Annotations
@SuppressWarnings:removal
loadLibraryback to summary
private NativeLibrary loadLibrary(Class<?> fromClass, String name, boolean isBuiltin)

Returns a NativeLibrary of the given name.

Parameters
fromClass:Class<?>

the caller class calling System::loadLibrary

name:String

library name

isBuiltin:boolean

built-in library

Exceptions
UnsatisfiedLinkError:
if the native library has already been loaded and registered in another NativeLibraries
loadLibraryback to summary
public NativeLibrary loadLibrary(String name)

Loads a native library from the system library path and java library path.

Parameters
name:String

library name

Exceptions
UnsatisfiedLinkError:
if the native library has already been loaded and registered in another NativeLibraries
loadLibraryback to summary
public NativeLibrary loadLibrary(Class<?> fromClass, String name)

Loads a native library from the system library path and java library path.

Parameters
fromClass:Class<?>

the caller class calling System::loadLibrary

name:String

library name

Exceptions
UnsatisfiedLinkError:
if the native library has already been loaded and registered in another NativeLibraries
newInstanceback to summary
public static NativeLibraries newInstance(ClassLoader loader)

Creates a NativeLibraries instance for loading JNI native libraries via for System::loadLibrary use. 1. Support of auto-unloading. The loaded native libraries are unloaded when the class loader is reclaimed. 2. Support of linking of native method. See JNI spec. 3. Restriction on a native library that can only be loaded by one class loader. Each class loader manages its own set of native libraries. The same JNI native library cannot be loaded into more than one class loader. This static factory method is intended only for System::loadLibrary use.

See Also
JNI Specification: Library and Version Management
releaseNativeLibraryLockback to summary
private static void releaseNativeLibraryLock(String libraryName)
unloadback to summary
private static native void unload(String name, boolean isBuiltin, long handle)
jdk.internal.loader back to summary

private final Class NativeLibraries.CountedLock

extends ReentrantLock
Class Inheritance
Annotations
@SuppressWarnings:serial

Field Summary

Modifier and TypeField and Description
private int

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public void
public int
public void
Inherited from java.util.concurrent.locks.ReentrantLock:
getHoldCountgetOwnergetQueuedThreadsgetQueueLengthgetWaitingThreadsgetWaitQueueLengthhasQueuedThreadhasQueuedThreadshasWaitersisFairisHeldByCurrentThreadisLockedlocklockInterruptiblynewConditiontoStringtryLocktryLockunlock

Field Detail

counterback to summary
private int counter

Constructor Detail

CountedLockback to summary
private CountedLock()

Method Detail

decrementback to summary
public void decrement()
getCounterback to summary
public int getCounter()
incrementback to summary
public void increment()
jdk.internal.loader back to summary

pack-priv Class NativeLibraries.LibraryPaths

extends Object
Class Inheritance

Field Summary

Modifier and TypeField and Description
pack-priv static final String[]
pack-priv static final String[]

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

SYS_PATHSback to summary
pack-priv static final String[] SYS_PATHS
USER_PATHSback to summary
pack-priv static final String[] USER_PATHS

Constructor Detail

LibraryPathsback to summary
pack-priv LibraryPaths()
jdk.internal.loader back to summary

private final Class NativeLibraries.NativeLibraryContext

extends Object
Class Inheritance

Field Summary

Modifier and TypeField and Description
private static Map<Thread, Deque<NativeLibraries.NativeLibraryImpl>>

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
private static Deque<NativeLibraries.NativeLibraryImpl>
private static boolean
private static NativeLibraries.NativeLibraryImpl
peek()

private static void
pop()

private static void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

nativeLibraryThreadContextback to summary
private static Map<Thread, Deque<NativeLibraries.NativeLibraryImpl>> nativeLibraryThreadContext

Constructor Detail

NativeLibraryContextback to summary
private NativeLibraryContext()

Method Detail

currentback to summary
private static Deque<NativeLibraries.NativeLibraryImpl> current()
isEmptyback to summary
private static boolean isEmpty()
peekback to summary
private static NativeLibraries.NativeLibraryImpl peek()
popback to summary
private static void pop()
pushback to summary
private static void push(NativeLibraries.NativeLibraryImpl lib)
jdk.internal.loader back to summary

pack-priv Class NativeLibraries.NativeLibraryImpl

extends NativeLibrary
Class Inheritance

NativeLibraryImpl denotes a loaded native library instance. Each NativeLibraries contains a map of loaded native libraries in the private field libraries. Every native library requires a particular version of JNI. This is denoted by the private jniVersion field. This field is set by the VM when it loads the library, and used by the VM to pass the correct version of JNI to the native methods.

Field Summary

Modifier and TypeField and Description
pack-priv final Class<?>
pack-priv long
pack-priv final boolean
pack-priv int
pack-priv final String

Constructor Summary

AccessConstructor and Description
pack-priv
NativeLibraryImpl(Class<?> fromClass, String name, boolean isBuiltin)

Method Summary

Modifier and TypeMethod and Description
pack-priv void
public long
find(String
the name of the symbol to be found
name
)

Implements abstract jdk.internal.loader.NativeLibrary.find.

Finds the address of the entry of the given name.
public String
pack-priv boolean
open()

private boolean
private Runnable
Inherited from jdk.internal.loader.NativeLibrary:
findEntry0lookup

Field Detail

fromClassback to summary
pack-priv final Class<?> fromClass
handleback to summary
pack-priv long handle
isBuiltinback to summary
pack-priv final boolean isBuiltin
jniVersionback to summary
pack-priv int jniVersion
nameback to summary
pack-priv final String name

Constructor Detail

NativeLibraryImplback to summary
pack-priv NativeLibraryImpl(Class<?> fromClass, String name, boolean isBuiltin)

Method Detail

closeback to summary
pack-priv void close()
findback to summary
public long find(String name)

Implements abstract jdk.internal.loader.NativeLibrary.find.

Doc from jdk.internal.loader.NativeLibrary.find.

Finds the address of the entry of the given name. Returns 0 if not found.

Parameters
name:String

the name of the symbol to be found

Annotations
@Override
nameback to summary
public String name()

Implements abstract jdk.internal.loader.NativeLibrary.name.

Annotations
@Override
openback to summary
pack-priv boolean open()
throwExceptionIfFailback to summary
private boolean throwExceptionIfFail()
Annotations
@SuppressWarnings:removal
unloaderback to summary
private Runnable unloader()
jdk.internal.loader back to summary

pack-priv Class NativeLibraries.Unloader

extends Object
implements Runnable
Class Inheritance
All Implemented Interfaces
java.lang.Runnable

Field Summary

Modifier and TypeField and Description
pack-priv final long
pack-priv final boolean
pack-priv final String
pack-priv static final NativeLibraries.NativeLibraryImpl

Constructor Summary

AccessConstructor and Description
pack-priv
Unloader(String name, long handle, boolean isBuiltin)

Method Summary

Modifier and TypeMethod and Description
public void
run()

Implements java.lang.Runnable.run.

Runs this operation.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

handleback to summary
pack-priv final long handle
isBuiltinback to summary
pack-priv final boolean isBuiltin
nameback to summary
pack-priv final String name
UNLOADERback to summary
pack-priv static final NativeLibraries.NativeLibraryImpl UNLOADER

Constructor Detail

Unloaderback to summary
pack-priv Unloader(String name, long handle, boolean isBuiltin)

Method Detail

runback to summary
public void run()

Implements java.lang.Runnable.run.

Doc from java.lang.Runnable.run.

Runs this operation.

Annotations
@Override