类:Unsafe

本文介绍了Java中的Unsafe类,该类允许直接访问内存,绕过Java的常规内存访问方式。内容包括Unsafe的介绍、API说明,如对象和对象属性、类和静态属性、数组的相关操作,以及直接内存操作和CAS原子操作。Unsafe类提供了诸如获取对象属性内存地址、读写内存值、CAS原子操作等功能,常用于高性能或底层操作中。
摘要由CSDN通过智能技术生成

1. Unsafe介绍

Unsafe不是标准Jdk中的类,定义在sun.misc包中,可以用来直接访问内存;

Unsafe为单例模式,提供getUnsafe静态方法获取实例,但是getUnsafe方法只允许被启动类加载器(BootstrapClassLoader)加载的类调用,否则抛出SecurityException;

Unsafe作为单例类,用theUnsafe属性保存单例实例,通常可以通过反射的方式获取Unsafe实例;

2. API介绍

Unsafe类用来读写内存中的数据,有2中获取内存地址的形式:通过Unsafe直接分配内存,类或对象中属性的内存地址;

Unsafe类访问类或对象属性内存与属性的访问权限无关;

Unsafe类中的方法一般分为3类:

  1. 类及静态属性相关
  2. 对象及对象属性相关
  3. 数组相关
  4. 直接操作内存相关
  5. CAS原子操作相关

2.1 对象及对象属性

  1. long objectFieldOffset(Field field):获取对象属性的内存地址,内存地址值共put/get等方法使用
  2. getInt(Object object, long address):获取object对象address偏移地址上面的int类型的值
  3. getIntVolatile(Object object, long address):意义同2,附加volatile功能及从主内存取值
  4. putInt(Object object, long address, int value):设置对象object的address偏移地址的值为value
  5. putIntVoatile(Object object, long address, int value):意义同4,附加volatile功能及新值刷新到主内存
  6. putOrderedInt(Object object, long address, int value):意义同4,如果属性有volatile修饰,不保证直接刷新到主内存
  7. compareAndSwapInt(Object object, long address, int expectedValue,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值