@aloxc
2018-06-29T10:21:43.000000Z
字数 1492
阅读 487
一起学 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的几个锁
