java Unsafe类

1.操作内存功能:

	分配内存 
	public native long allocateMemory(long var1);
	重新分配内存
	public native long reallocateMemory(long var1, long var3);
	内存赋值
	public native void setMemory(Object var1, long var2, long var4, byte var6);
	复制内存
	public native void copyMemory(Object var1, long var2, Object var4, long var5, long var7);
	释放内存
	public native void freeMemory(long var1);

1.1操作变量内存:

	public native byte getByte(long var1);
	
	public native void putByte(long var1, byte var3);
	
	public native short getShort(long var1);
	
	public native void putShort(long var1, short var3);
	
	public native char getChar(long var1);
	
	public native void putChar(long var1, char var3);
	
	public native int getInt(long var1);
	
	public native void putInt(long var1, int var3);
	
	public native long getLong(long var1);
	
	public native void putLong(long var1, long var3);
	
	public native float getFloat(long var1);
	
	public native void putFloat(long var1, float var3);
	
	public native double getDouble(long var1);
	
	public native void putDouble(long var1, double var3);
	
	public native long getAddress(long var1);
	
	public native void putAddress(long var1, long var3);

1.2操作对象内存:

	public native Object allocateInstance(Class<?> var1) throws InstantiationException;
	public native long staticFieldOffset(Field var1);
	public native long objectFieldOffset(Field var1);
	public native Object staticFieldBase(Field var1);
	public native Object getObjectVolatile(Object var1, long var2);
	public native void putObjectVolatile(Object var1, long var2, Object var4);

1.3操作数组内存:

	public native int arrayBaseOffset(Class<?> var1);
	public native int arrayIndexScale(Class<?> var1);

1.4volatile变量操作:

	public native int getIntVolatile(Object var1, long var2);

    public native void putIntVolatile(Object var1, long var2, int var4);

    public native boolean getBooleanVolatile(Object var1, long var2);

    public native void putBooleanVolatile(Object var1, long var2, boolean var4);

    public native byte getByteVolatile(Object var1, long var2);

    public native void putByteVolatile(Object var1, long var2, byte var4);

    public native short getShortVolatile(Object var1, long var2);

    public native void putShortVolatile(Object var1, long var2, short var4);

    public native char getCharVolatile(Object var1, long var2);

    public native void putCharVolatile(Object var1, long var2, char var4);

    public native long getLongVolatile(Object var1, long var2);

    public native void putLongVolatile(Object var1, long var2, long var4);

    public native float getFloatVolatile(Object var1, long var2);

    public native void putFloatVolatile(Object var1, long var2, float var4);

    public native double getDoubleVolatile(Object var1, long var2);

    public native void putDoubleVolatile(Object var1, long var2, double var4);

2.cas操作:

	对象cas赋值操作
	public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);
	整型cas赋值操作
	public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);
	长整型cas赋值操作
	public final native boolean compareAndSwapLong(Object var1, long var2, long var4, long var6);
	整型加运算cas操作
	public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
            var5 = this.getIntVolatile(var1, var2);
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));

        return var5;
    }
	长整型加运算cas操作
    public final long getAndAddLong(Object var1, long var2, long var4) {
        long var6;
        do {
            var6 = this.getLongVolatile(var1, var2);
        } while(!this.compareAndSwapLong(var1, var2, var6, var6 + var4));

        return var6;
    }
	整型赋值cas自旋操作
    public final int getAndSetInt(Object var1, long var2, int var4) {
        int var5;
        do {
            var5 = this.getIntVolatile(var1, var2);
        } while(!this.compareAndSwapInt(var1, var2, var5, var4));

        return var5;
    }
	长整型赋值cas自旋操作
    public final long getAndSetLong(Object var1, long var2, long var4) {
        long var6;
        do {
            var6 = this.getLongVolatile(var1, var2);
        } while(!this.compareAndSwapLong(var1, var2, var6, var4));

        return var6;
    }
	对象赋值cas自旋操作
    public final Object getAndSetObject(Object var1, long var2, Object var4) {
        Object var5;
        do {
            var5 = this.getObjectVolatile(var1, var2);
        } while(!this.compareAndSwapObject(var1, var2, var5, var4));

        return var5;
    }

3.内存屏障功能:

	读内存屏障
	public native void loadFence();
	写内存屏障
	public native void storeFence();
	读写内存屏障
	public native void fullFence();

4.线程操作功能:

	线程释放
	public native void unpark(Object var1);
	线程挂起
	public native void park(boolean var1, long var2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值