unsafe

unsafe类是Java中一个比较特殊的类,它为Java提供了一种不安全的 直接访问和操作内存和线程和对象

正如它的名字一样,unsafe提供了很多不安全的操作,我们应该尽量不直接使用它,除非真的要操作底层

unsafe类需要通过反射才能获取对象,这样做的是让程序员知道这是一个非常底层的类,如果是能直接new的

话,那使用起来就很轻松了

内存操作:

//分配新的本地空间
public native long allocateMemory(long bytes);
//重新调整内存空间的大小
public native long reallocateMemory(long address, long bytes);
//将内存设置为指定值
public native void setMemory(Object o, long offset, long bytes, byte value);
//内存拷贝
public native void copyMemory(Object srcBase, long srcOffset,Object destBase, long destOffset,long bytes);
//清除内存
public native void freeMemory(long address);

对象操作://在对象的指定偏移地址获取一个对象引用publicnativeObjectgetObject(Objecto,longoffset);//在对象指定偏移地址写入一个对象引用publicnativevoidputObject(Objecto,longoffset,Objectx);//在对象的指定偏移地址处读取一个int值,支持volatile load语义publicnativeintgetIntVolatile(Objecto,longoffset);//在对象指定偏移地址处写入一个int,支持volatile store语义publicnativevoidputIntVolatile(Objecto,longoffset,intx);

CAS操作:publicfinalnativebooleancompareAndSwapInt(Objecto,longoffset,intexpected,intx);

线程调度:parkunpark

Class操作://获取静态属性的偏移量publicnativelongstaticFieldOffset(Fieldf);//获取静态属性的对象指针publicnativeObjectstaticFieldBase(Fieldf);//判断类是否需要实例化(用于获取类的静态属性前进行检测)publicnativebooleanshouldBeInitialized(Class<?>c);