Java篇--如何获取Unsafe类的实例

Java篇--如何获取Unsafe类的实例

如何获取Unsafe类的实例

Unsafe 提供两个功能

  • 绕过 JVM 直接修改内存(对象)
  • 使用硬件 CPU 指令实现 CAS 原子操作

Unsafe 为调用者提供执行非安全操作的能力,由于返回的 Unsafe 对象可以读写任意的内存地址数据,调用者应该小心谨慎的使用改对象,一定不用把它传递到非信任代码。该类的大部分方法都是非常底层的操作,并牵涉到一小部分典型的机器都包含的硬件指令,编译器可以对这些进行优化。
我们在一般的并发编程中不会直接用到 Unsafe,但是很多 Java 基础类库与诸如 Netty、Cassandra 和 Kafka 等高性能库都采用它,它在提升 Java 运行效率、增强 Java 语言底层操作能力方面起了很大作用,但因为太强大,所以有诸多限制:

  • Unsafe 只能用于 Hotspot 虚拟机
  • unsafe无法直接通过常规方法获取到实例,可以使用反射的方法获取到theUnsafe实例
private static Unsafe getUnsafe() {
    try {
        Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
        return (Unsafe) f.get(null);
    } catch (Exception e) {
        /* ... */
    }
    return null;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值