SparkSQL10_Unsafe相关_01_sun.misc.Unsafe

1. Unsafe.copyMemory

1.1 如下代码实现字节数组的拷贝

import sun.misc.Unsafe;

import java.lang.reflect.Field;

public class UnsafeTest {
    private static final Unsafe _UNSAFE;
    private static final int BYTE_ARRAY_OFFSET;
    private static final int INT_ARRAY_OFFSET;

    static {
        sun.misc.Unsafe unsafe;
        try {
            //通过反射获得Unsafe类的theUnsafe成员变量
            Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
            //设置为可访问
            unsafeField.setAccessible(true);
            //theUnsafe是静态变量,可以通过null对象获取其值,获得的值就是Unsafe成员变量
            unsafe = (sun.misc.Unsafe) unsafeField.get(null);
        } catch (Throwable cause) {
            cause.printStackTrace();
            unsafe = null;
        }
        _UNSAFE = unsafe;
        BYTE_ARRAY_OFFSET = _UNSAFE.arrayBaseOffset(byte[].class);
        INT_ARRAY_OFFSET = _UNSAFE.arrayBaseOffset(int[].class);
    }

    public static void main(String[] args) {
        System.out.println("======================BYTE ARRAY=======================");
        byte[] src = new byte[]{1, 2, 3, 4, 5, 6};
        byte[] dest = new byte[src.length];
        _UNSAFE.copyMemory(src, BYTE_ARRAY_OFFSET, dest, BYTE_ARRAY_OFFSET, src.length);
        for (byte b : dest) {
            System.out.println(b);
        }

        System.out.println("=======================INT ARRAY=======================");
        int[] isrc = new int[]{11,12,13,14,15,16};
        int[] idest = new int[isrc.length];
        _UNSAFE.copyMemory(isrc, INT_ARRAY_OFFSET, idest, INT_ARRAY_OFFSET,isrc.length * 4); //最后一个参数表示复制内存的长度
        for (int ii : idest) {
            System.out.println(ii);
        }

    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值