@aloxc
2018-06-29T10:21:43.000000Z
字数 1492
阅读 434
一起学
ignite
源码分析
高并发
如题,ignite中,有一些地方使用到了java中的“指针”,注意这个所谓的指针式加了双引号的,为什么?因为java中根本没有指针,也就是无法直接使用命令修改指针地址所保存的数据。但是java中有个Unsafe类,这个类中有很多的本地方法,这些方法是使用c实现,借助c,java实现了指针操作。
Unsafe.java中部分代码,
public native int getInt(Object var1, long var2);
public native void putInt(Object var1, long var2, int var4);
public native Object getObject(Object var1, long var2);
public native void putObject(Object var1, long var2, Object var4);
public native boolean getBoolean(Object var1, long var2);
public native void putBoolean(Object var1, long var2, boolean var4);
public native byte getByte(Object var1, long var2);
public native void putByte(Object var1, long var2, byte var4);
public native short getShort(Object var1, long var2);
public native void putShort(Object var1, long var2, short var4);
public native char getChar(Object var1, long var2);
public native void putChar(Object var1, long var2, char var4);
public native long getLong(Object var1, long var2);
public native void putLong(Object var1, long var2, long var4);
在ignite有一个Unsafe的封装类,GridUnsafe,本类封装了jdk中的unsafe操作,如下面部分代码
/**
* Gets integer value from object field.
*
* @param obj Object.
* @param fieldOff Field offset.
* @return Integer value from object field.
*/
public static int getIntField(Object obj, long fieldOff) {
return UNSAFE.getInt(obj, fieldOff);
}
/**
* Stores integer value into object field.
*
* @param obj Object.
* @param fieldOff Field offset.
* @param val Value.
*/
public static void putIntField(Object obj, long fieldOff, int val) {
UNSAFE.putInt(obj, fieldOff, val);
}
说了这些,我们再来分析下ignite的几个锁