使用不安全

一些不安全的用途如下:

使用 API
關閉堆/直接記憶體分配,重新分配和釋放 allocateMemory(bytes)reallocateMemory(address, bytes)freeMemory(address)
記憶圍欄 loadFence()storeFence()fullFence()
停車當前執行緒 park(isAbsolute, time)unpark(thread)
直接欄位和/或記憶體訪問 get*put*系列方法
丟擲未經檢查的異常 throwException(e)
CAS 和原子操作 compareAndSwap*系列方法
設定記憶體 setMemory
易失性或併發操作 get*Volatileput*VolatileputOrdered*

get 和 put 系列方法與給定物件相關。如果物件為 null,則將其視為絕對地址。

// Putting a value to a field
protected static long fieldOffset = UNSAFE.objectFieldOffset(getClass().getField("theField"));
UNSAFE.putLong(this, fieldOffset , newValue);

// Puting an absolute value
 UNSAFE.putLong(null, address, newValue);
 UNSAFE.putLong(address, newValue);

有些方法僅針對 int 和 long 定義。你可以使用 floatToRawIntBitsintBitsToFloat,doubleToRawLongBits,longBitsToDouble 在浮點數和雙精度數上使用這些方法。