neau火车

 

Unsafe类学习

在看Juc中AtomicInteger的源代码,发现里面用了一个类:Unsafe。之前没有接触过,这里就来瞅瞅。

从这个链接可以看到Unsafe的源代码,从注释可以看到:

这个类提供底层的操作并且应该用于可信的代码。字段可以通过内存直接读取(应该是直接控制JVM的内存了)。

同时可以看到,类以单例的方式提供实例。所有的方法都是native方法,引用具体的C代码实现。

下面看一下具体所提供的方法:

long objectFieldOffset(Field field);—>获取对象的中某字段的偏移地址

native long objectFieldOffset0(Field field);—>native方法,实现上述方法的功能

int arrayBaseOffset(Class clazz); —>获取数组的第一个对象的地址,clazz必须是array类

native int arrayBaseOffset0(Class clazz); —>native方法,实现上述方法的功能

int arrayIndexScale(Class clazz); —>获得数组中每个元素的大小,clazz必须是array类

native int arrayIndexScale0(Class clazz); —>native方法,实现上述方法

native boolean compareAndSwapInt(Object obj, long offset, int expectedValue, int newValue); —>对某个对象的int字段采用CAS操作

native boolean compareAndSwapLong(Object obj, long offset, long expectedValue, long newValue); —>对某个对象的long字段采用CAS操作

native boolean compareAndSwapObject(Object obj, long offset, Object expectedValue, Object newValue); —>对某个对象的Object字段采用CAS操作,这里比较的是对象的引用

native int getIntVolatile(Object obj, long offset); —>采用volatile语义获取对象的int字段(volatile应该是保证内存和缓存的数据一致)

native void putIntVolatile(Object obj, long offset, int newValue); —>采用volatile存放对象的int字段

native long getLongVolatile(Object obj, long offset); —>采用volatile语义获取对象的long字段

native void putLongVolatile(Object obj, long offset, long newValue); —>采用volatile语义存放对象的long字段

native Object getObjectVolatile(Object obj, long offset);—>采用volatile语义获取对象的object字段

native void putObjectVolatile(Object obj, long offset, Object newValue); —>采用volatile语义存放对象的object字段

—>下列方法功能与上面相同,不采用volatile语义,即不保证主存和缓存数据同步

native int getInt(Object obj, long offset);

native void putInt(Object obj, long offset, int newValue);

native long getLong(Object obj, long offset);

native void putLong(Object obj, long offset, long newValue);

native Object getObject(Object obj, long offset);

native void putObject(Object obj, long offset, Object newValue);

—>后面的两个方法还不完全明白,继续学习。搞清楚了在写

void park(boolean absolute, long time);

void unpark(Object obj);

 

转自 http://impzx.com/unsafe%E7%B1%BB%E5%AD%A6%E4%B9%A0/

posted on 2012-10-09 12:01  neau火车  阅读(247)  评论(0编辑  收藏  举报

导航