Package com.sun.ts.lib.util.sec.misc
Class Unsafe
java.lang.Object
com.sun.ts.lib.util.sec.misc.Unsafe
A collection of methods for performing low-level, unsafe operations. Although the class and all methods are public,
use of this class is limited because only trusted code can obtain instances of it.
- Author:
- John R. Rose
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
This constant differs from all results that will ever be returned fromstaticFieldOffset(java.lang.reflect.Field)
,objectFieldOffset(java.lang.reflect.Field)
, orarrayBaseOffset(java.lang.Class)
. -
Method Summary
Modifier and TypeMethodDescriptionint
Report the size in bytes of a native pointer, as stored viaputAddress(long, long)
.allocateInstance
(Class cls) Allocate an instance but do not run any constructor.long
allocateMemory
(long bytes) Allocates a new block of native memory, of the given size in bytes.int
arrayBaseOffset
(Class arrayClass) Report the offset of the first element in the storage allocation of a given array class.int
arrayIndexScale
(Class arrayClass) Report the scale factor for addressing elements in the storage allocation of a given array class.final boolean
compareAndSwapInt
(Object o, long offset, int expected, int x) Atomically update Java variable tox
if it is currently holdingexpected
.final boolean
compareAndSwapLong
(Object o, long offset, long expected, long x) Atomically update Java variable tox
if it is currently holdingexpected
.final boolean
compareAndSwapObject
(Object o, long offset, Object expected, Object x) Atomically update Java variable tox
if it is currently holdingexpected
.void
copyMemory
(long srcAddress, long destAddress, long bytes) Sets all bytes in a given block of memory to a copy of another block.defineClass
(String name, byte[] b, int off, int len) defineClass
(String name, byte[] b, int off, int len, ClassLoader loader, ProtectionDomain protectionDomain) Tell the VM to define a class, without security checks.void
Ensure the given class has been initialized.int
fieldOffset
(Field f) Deprecated.void
freeMemory
(long address) Disposes of a block of native memory, as obtained fromallocateMemory(long)
orreallocateMemory(long, long)
.long
getAddress
(long address) Fetches a native pointer from a given memory address.boolean
getBoolean
(Object o, int offset) Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.boolean
getBoolean
(Object o, long offset) boolean
getBooleanVolatile
(Object o, long offset) Volatile version ofgetBoolean(Object, long)
byte
getByte
(long address) Fetches a value from a given memory address.byte
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.byte
byte
getByteVolatile
(Object o, long offset) Volatile version ofgetByte(Object, long)
char
getChar
(long address) char
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.char
char
getCharVolatile
(Object o, long offset) Volatile version ofgetChar(Object, long)
double
getDouble
(long address) double
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.double
double
getDoubleVolatile
(Object o, long offset) Volatile version ofgetDouble(Object, long)
float
getFloat
(long address) float
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.float
float
getFloatVolatile
(Object o, long offset) Volatile version ofgetFloat(Object, long)
int
getInt
(long address) int
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.int
Fetches a value from a given Java variable.int
getIntVolatile
(Object o, long offset) Volatile version ofgetInt(Object, long)
int
getLoadAverage
(double[] loadavg, int nelems) Gets the load average in the system run queue assigned to the available processors averaged over various periods of time.long
getLong
(long address) long
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.long
long
getLongVolatile
(Object o, long offset) Volatile version ofgetLong(Object, long)
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.Fetches a reference value from a given Java variable.getObjectVolatile
(Object o, long offset) Fetches a reference value from a given Java variable, with volatile load semantics.short
getShort
(long address) short
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.short
short
getShortVolatile
(Object o, long offset) Volatile version ofgetShort(Object, long)
static Unsafe
Provides the caller with the capability of performing unsafe operations.void
Lock the object.void
Unlock the object.long
Report the location of a given static field, in conjunction withstaticFieldBase(java.lang.Class)
.int
pageSize()
Report the size in bytes of a native memory page (whatever that is).void
park
(boolean isAbsolute, long time) Block current thread, returning when a balancingunpark
occurs, or a balancingunpark
has already occurred, or the thread is interrupted, or, if not absolute and time is not zero, the given time nanoseconds have elapsed, or if absolute, the given deadline in milliseconds since Epoch has passed, or spuriously (i.e., returning for no "reason").void
putAddress
(long address, long x) Stores a native pointer into a given memory address.void
putBoolean
(Object o, int offset, boolean x) Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
putBoolean
(Object o, long offset, boolean x) void
putBooleanVolatile
(Object o, long offset, boolean x) Volatile version ofputBoolean(Object, long, boolean)
void
putByte
(long address, byte x) Stores a value into a given memory address.void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putByteVolatile
(Object o, long offset, byte x) Volatile version ofputByte(Object, long, byte)
void
putChar
(long address, char x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putCharVolatile
(Object o, long offset, char x) Volatile version ofputChar(Object, long, char)
void
putDouble
(long address, double x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putDoubleVolatile
(Object o, long offset, double x) Volatile version ofputDouble(Object, long, double)
void
putFloat
(long address, float x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putFloatVolatile
(Object o, long offset, float x) Volatile version ofputFloat(Object, long, float)
void
putInt
(long address, int x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
Stores a value into a given Java variable.void
putIntVolatile
(Object o, long offset, int x) Volatile version ofputInt(Object, long, int)
void
putLong
(long address, long x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putLongVolatile
(Object o, long offset, long x) Volatile version ofputLong(Object, long, long)
void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
Stores a reference value into a given Java variable.void
putObjectVolatile
(Object o, long offset, Object x) Stores a reference value into a given Java variable, with volatile store semantics.void
putOrderedInt
(Object o, long offset, int x) Ordered/Lazy version ofputIntVolatile(Object, long, int)
void
putOrderedLong
(Object o, long offset, long x) Ordered/Lazy version ofputLongVolatile(Object, long, long)
void
putOrderedObject
(Object o, long offset, Object x) Version ofputObjectVolatile(Object, long, Object)
that does not guarantee immediate visibility of the store to other threads.void
putShort
(long address, short x) void
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long.void
void
putShortVolatile
(Object o, long offset, short x) Volatile version ofputShort(Object, long, short)
long
reallocateMemory
(long address, long bytes) Resizes a new block of native memory, to the given size in bytes.void
setMemory
(long address, long bytes, byte value) Sets all bytes in a given block of memory to a fixed value (usually zero).Deprecated.As of 1.4.1, usestaticFieldBase(Field)
to obtain the base pertaining to a specificField
.Report the location of a given static field, in conjunction withstaticFieldOffset(java.lang.reflect.Field)
.long
Report the location of a given field in the storage allocation of its class.void
Throw the exception without telling the verifier.boolean
Tries to lock the object.void
Unblock the given thread blocked onpark
, or, if it is not blocked, cause the subsequent call topark
not to block.
-
Field Details
-
INVALID_FIELD_OFFSET
public static final int INVALID_FIELD_OFFSETThis constant differs from all results that will ever be returned fromstaticFieldOffset(java.lang.reflect.Field)
,objectFieldOffset(java.lang.reflect.Field)
, orarrayBaseOffset(java.lang.Class)
.- See Also:
-
-
Method Details
-
getUnsafe
Provides the caller with the capability of performing unsafe operations. The returnedUnsafe
object should be carefully guarded by the caller, since it can be used to read and write data at arbitrary memory addresses. It must never be passed to untrusted code. Most methods in this class are very low-level, and correspond to a small number of hardware instructions (on typical machines). Compilers are encouraged to optimize these methods accordingly. Here is a suggested idiom for using unsafe operations:class MyTrustedClass { private static final Unsafe unsafe = Unsafe.getUnsafe(); ... private long myCountAddress = ...; public int getCount() { return unsafe.getByte(myCountAddress); } }
final
.)- Throws:
SecurityException
- if a security manager exists and itscheckPropertiesAccess
method doesn't allow access to the system properties.
-
getInt
Fetches a value from a given Java variable. More specifically, fetches a field or array element within the given objecto
at the given offset, or (ifo
is null) from the memory address whose numerical value is the given offset. The results are undefined unless one of the following cases is true:- The offset was obtained from
objectFieldOffset(java.lang.reflect.Field)
on theField
of some Java field and the object referred to byo
is of a class compatible with that field's class. - The offset and object reference
o
(either null or non-null) were both obtained viastaticFieldOffset(java.lang.reflect.Field)
andstaticFieldBase(java.lang.Class)
(respectively) from the reflectiveField
representation of some Java field. - The object referred to by
o
is an array, and the offset is an integer of the formB+N*S
, whereN
is a valid index into the array, andB
andS
are the values obtained byarrayBaseOffset(java.lang.Class)
andarrayIndexScale(java.lang.Class)
(respectively) from the array's class. The value referred to is theN
th element of the array.
getInt(long)
, which provide (in effect) a single-register addressing mode for non-Java variables. However, because Java variables may have a different layout in memory from non-Java variables, programmers should not assume that these two addressing modes are ever equivalent. Also, programmers should remember that offsets from the double-register addressing mode cannot be portably confused with longs used in the single-register addressing mode.- Parameters:
o
- Java heap object in which the variable resides, if any, else nulloffset
- indication of where the variable resides in a Java heap object, if any, else a memory address locating the variable statically- Returns:
- the value fetched from the indicated Java variable
- Throws:
RuntimeException
- No defined exceptions are thrown, not evenNullPointerException
- The offset was obtained from
-
putInt
Stores a value into a given Java variable. The first two parameters are interpreted exactly as withgetInt(Object, long)
to refer to a specific Java variable (field or array element). The given value is stored into that variable. The variable must be of the same type as the method parameterx
.- Parameters:
o
- Java heap object in which the variable resides, if any, else nulloffset
- indication of where the variable resides in a Java heap object, if any, else a memory address locating the variable staticallyx
- the value to store into the indicated Java variable- Throws:
RuntimeException
- No defined exceptions are thrown, not evenNullPointerException
-
getObject
Fetches a reference value from a given Java variable.- See Also:
-
putObject
Stores a reference value into a given Java variable. Unless the referencex
being stored is either null or matches the field type, the results are undefined. If the referenceo
is non-null, car marks or other store barriers for that object (if the VM requires them) are updated.- See Also:
-
getBoolean
- See Also:
-
putBoolean
- See Also:
-
getByte
- See Also:
-
putByte
- See Also:
-
getShort
- See Also:
-
putShort
- See Also:
-
getChar
- See Also:
-
putChar
- See Also:
-
getLong
- See Also:
-
putLong
- See Also:
-
getFloat
- See Also:
-
putFloat
- See Also:
-
getDouble
- See Also:
-
putDouble
- See Also:
-
getInt
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
.This method, like all others with 32-bit offsets, was native in a previous release but is now a wrapper which simply casts the offset to a long value. It provides backward compatibility with bytecodes compiled against 1.4. -
putInt
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getObject
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putObject
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getBoolean
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putBoolean
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getByte
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putByte
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getShort
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putShort
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getChar
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putChar
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getLong
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putLong
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getFloat
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putFloat
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getDouble
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
putDouble
Deprecated.As of 1.4.1, cast the 32-bit offset argument to a long. SeestaticFieldOffset(java.lang.reflect.Field)
. -
getByte
public byte getByte(long address) Fetches a value from a given memory address. If the address is zero, or does not point into a block obtained fromallocateMemory(long)
, the results are undefined.- See Also:
-
putByte
public void putByte(long address, byte x) Stores a value into a given memory address. If the address is zero, or does not point into a block obtained fromallocateMemory(long)
, the results are undefined.- See Also:
-
getShort
public short getShort(long address) - See Also:
-
putShort
public void putShort(long address, short x) - See Also:
-
getChar
public char getChar(long address) - See Also:
-
putChar
public void putChar(long address, char x) - See Also:
-
getInt
public int getInt(long address) - See Also:
-
putInt
public void putInt(long address, int x) - See Also:
-
getLong
public long getLong(long address) - See Also:
-
putLong
public void putLong(long address, long x) - See Also:
-
getFloat
public float getFloat(long address) - See Also:
-
putFloat
public void putFloat(long address, float x) - See Also:
-
getDouble
public double getDouble(long address) - See Also:
-
putDouble
public void putDouble(long address, double x) - See Also:
-
getAddress
public long getAddress(long address) Fetches a native pointer from a given memory address. If the address is zero, or does not point into a block obtained fromallocateMemory(long)
, the results are undefined. If the native pointer is less than 64 bits wide, it is extended as an unsigned number to a Java long. The pointer may be indexed by any given byte offset, simply by adding that offset (as a simple integer) to the long representing the pointer. The number of bytes actually read from the target address maybe determined by consultingaddressSize()
.- See Also:
-
putAddress
public void putAddress(long address, long x) Stores a native pointer into a given memory address. If the address is zero, or does not point into a block obtained fromallocateMemory(long)
, the results are undefined. The number of bytes actually written at the target address maybe determined by consultingaddressSize()
.- See Also:
-
allocateMemory
public long allocateMemory(long bytes) Allocates a new block of native memory, of the given size in bytes. The contents of the memory are uninitialized; they will generally be garbage. The resulting native pointer will never be zero, and will be aligned for all value types. Dispose of this memory by callingfreeMemory(long)
, or resize it withreallocateMemory(long, long)
.- Throws:
IllegalArgumentException
- if the size is negative or too large for the native size_t typeOutOfMemoryError
- if the allocation is refused by the system- See Also:
-
reallocateMemory
public long reallocateMemory(long address, long bytes) Resizes a new block of native memory, to the given size in bytes. The contents of the new block past the size of the old block are uninitialized; they will generally be garbage. The resulting native pointer will be zero if and only if the requested size is zero. The resulting native pointer will be aligned for all value types. Dispose of this memory by callingfreeMemory(long)
, or resize it withreallocateMemory(long, long)
. The address passed to this method may be null, in which case an allocation will be performed.- Throws:
IllegalArgumentException
- if the size is negative or too large for the native size_t typeOutOfMemoryError
- if the allocation is refused by the system- See Also:
-
setMemory
public void setMemory(long address, long bytes, byte value) Sets all bytes in a given block of memory to a fixed value (usually zero). -
copyMemory
public void copyMemory(long srcAddress, long destAddress, long bytes) Sets all bytes in a given block of memory to a copy of another block. -
freeMemory
public void freeMemory(long address) Disposes of a block of native memory, as obtained fromallocateMemory(long)
orreallocateMemory(long, long)
. The address passed to this method may be null, in which case no action is taken.- See Also:
-
fieldOffset
Deprecated.As of 1.4.1, usestaticFieldOffset(java.lang.reflect.Field)
for static fields andobjectFieldOffset(java.lang.reflect.Field)
for non-static fields.Returns the offset of a field, truncated to 32 bits. This method is implemented as follows:public int fieldOffset(Field f) { if (Modifier.isStatic(f.getModifiers())) return (int) staticFieldOffset(f); else return (int) objectFieldOffset(f); }
-
staticFieldBase
Deprecated.As of 1.4.1, usestaticFieldBase(Field)
to obtain the base pertaining to a specificField
. This method works only for JVMs which store all statics for a given class in one place.Returns the base address for accessing some static field in the given class. This method is implemented as follows:public Object staticFieldBase(Class c) { Field[] fields = c.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { if (Modifier.isStatic(fields[i].getModifiers())) { return staticFieldBase(fields[i]); } } return null; }
-
staticFieldOffset
Report the location of a given field in the storage allocation of its class. Do not expect to perform any sort of arithmetic on this offset; it is just a cookie which is passed to the unsafe heap memory accessors. Any given field will always have the same offset and base, and no two distinct fields of the same class will ever have the same offset and base. As of 1.4.1, offsets for fields are represented as long values, although the Sun JVM does not use the most significant 32 bits. However, JVM implementations which store static fields at absolute addresses can use long offsets and null base pointers to express the field locations in a form usable bygetInt(Object,long)
. Therefore, code which will be ported to such JVMs on 64-bit platforms must preserve all bits of static field offsets.- See Also:
-
objectFieldOffset
Report the location of a given static field, in conjunction withstaticFieldBase(java.lang.Class)
. Do not expect to perform any sort of arithmetic on this offset; it is just a cookie which is passed to the unsafe heap memory accessors. Any given field will always have the same offset, and no two distinct fields of the same class will ever have the same offset. As of 1.4.1, offsets for fields are represented as long values, although the Sun JVM does not use the most significant 32 bits. It is hard to imagine a JVM technology which needs more than a few bits to encode an offset within a non-array object, However, for consistency with other methods in this class, this method reports its result as a long value.- See Also:
-
staticFieldBase
Report the location of a given static field, in conjunction withstaticFieldOffset(java.lang.reflect.Field)
. Fetch the base "Object", if any, with which static fields of the given class can be accessed via methods likegetInt(Object, long)
. This value may be null. This value may refer to an object which is a "cookie", not guaranteed to be a real Object, and it should not be used in any way except as argument to the get and put routines in this class. -
ensureClassInitialized
Ensure the given class has been initialized. This is often needed in conjunction with obtaining the static field base of a class. -
arrayBaseOffset
Report the offset of the first element in the storage allocation of a given array class. IfarrayIndexScale(java.lang.Class)
returns a non-zero value for the same class, you may use that scale factor, together with this base offset, to form new offsets to access elements of arrays of the given class. -
arrayIndexScale
Report the scale factor for addressing elements in the storage allocation of a given array class. However, arrays of "narrow" types will generally not work properly with accessors likegetByte(Object, int)
, so the scale factor for such classes is reported as zero. -
addressSize
public int addressSize()Report the size in bytes of a native pointer, as stored viaputAddress(long, long)
. This value will be either 4 or 8. Note that the sizes of other primitive types (as stored in native memory blocks) is determined fully by their information content. -
pageSize
public int pageSize()Report the size in bytes of a native memory page (whatever that is). This value will always be a power of two. -
defineClass
public Class defineClass(String name, byte[] b, int off, int len, ClassLoader loader, ProtectionDomain protectionDomain) Tell the VM to define a class, without security checks. By default, the class loader and protection domain come from the caller's class. -
defineClass
-
allocateInstance
Allocate an instance but do not run any constructor. Initializes the class if it has not yet been.- Throws:
InstantiationException
-
monitorEnter
Lock the object. It must get unlocked viamonitorExit(java.lang.Object)
. -
monitorExit
Unlock the object. It must have been locked viamonitorEnter(java.lang.Object)
. -
tryMonitorEnter
Tries to lock the object. Returns true or false to indicate whether the lock succeeded. If it did, the object must be unlocked viamonitorExit(java.lang.Object)
. -
throwException
Throw the exception without telling the verifier. -
compareAndSwapObject
Atomically update Java variable tox
if it is currently holdingexpected
.- Returns:
true
if successful
-
compareAndSwapInt
Atomically update Java variable tox
if it is currently holdingexpected
.- Returns:
true
if successful
-
compareAndSwapLong
Atomically update Java variable tox
if it is currently holdingexpected
.- Returns:
true
if successful
-
getObjectVolatile
Fetches a reference value from a given Java variable, with volatile load semantics. Otherwise identical togetObject(Object, long)
-
putObjectVolatile
Stores a reference value into a given Java variable, with volatile store semantics. Otherwise identical toputObject(Object, long, Object)
-
getIntVolatile
Volatile version ofgetInt(Object, long)
-
putIntVolatile
Volatile version ofputInt(Object, long, int)
-
getBooleanVolatile
Volatile version ofgetBoolean(Object, long)
-
putBooleanVolatile
Volatile version ofputBoolean(Object, long, boolean)
-
getByteVolatile
Volatile version ofgetByte(Object, long)
-
putByteVolatile
Volatile version ofputByte(Object, long, byte)
-
getShortVolatile
Volatile version ofgetShort(Object, long)
-
putShortVolatile
Volatile version ofputShort(Object, long, short)
-
getCharVolatile
Volatile version ofgetChar(Object, long)
-
putCharVolatile
Volatile version ofputChar(Object, long, char)
-
getLongVolatile
Volatile version ofgetLong(Object, long)
-
putLongVolatile
Volatile version ofputLong(Object, long, long)
-
getFloatVolatile
Volatile version ofgetFloat(Object, long)
-
putFloatVolatile
Volatile version ofputFloat(Object, long, float)
-
getDoubleVolatile
Volatile version ofgetDouble(Object, long)
-
putDoubleVolatile
Volatile version ofputDouble(Object, long, double)
-
putOrderedObject
Version ofputObjectVolatile(Object, long, Object)
that does not guarantee immediate visibility of the store to other threads. This method is generally only useful if the underlying field is a Java volatile (or if an array cell, one that is otherwise only accessed using volatile accesses). -
putOrderedInt
Ordered/Lazy version ofputIntVolatile(Object, long, int)
-
putOrderedLong
Ordered/Lazy version ofputLongVolatile(Object, long, long)
-
unpark
Unblock the given thread blocked onpark
, or, if it is not blocked, cause the subsequent call topark
not to block. Note: this operation is "unsafe" solely because the caller must somehow ensure that the thread has not been destroyed. Nothing special is usually required to ensure this when called from Java (in which there will ordinarily be a live reference to the thread) but this is not nearly-automatically so when calling from native code.- Parameters:
thread
- the thread to unpark.
-
park
public void park(boolean isAbsolute, long time) Block current thread, returning when a balancingunpark
occurs, or a balancingunpark
has already occurred, or the thread is interrupted, or, if not absolute and time is not zero, the given time nanoseconds have elapsed, or if absolute, the given deadline in milliseconds since Epoch has passed, or spuriously (i.e., returning for no "reason"). Note: This operation is in the Unsafe class only becauseunpark
is, so it would be strange to place it elsewhere. -
getLoadAverage
public int getLoadAverage(double[] loadavg, int nelems) Gets the load average in the system run queue assigned to the available processors averaged over various periods of time. This method retrieves the givennelem
samples and assigns to the elements of the givenloadavg
array. The system imposes a maximum of 3 samples, representing averages over the last 1, 5, and 15 minutes, respectively.- Returns:
- the number of samples actually retrieved; or -1 if the load average is unobtainable.
-
staticFieldOffset(java.lang.reflect.Field)
for static fields andobjectFieldOffset(java.lang.reflect.Field)
for non-static fields.