sun.misc.Unsafe

sun.misc.Unsafe
huaruisun.misc.Unsaf
简介
sun.misc.Unsafe是Java底层API(仅限Java内部使用,反射可调用)提供的一个神奇的Java类,Unsafe提供了非常底层的内存、CAS、线程调度、类、对象等操作、Unsafe正如它的名字一样它提供的几乎所有的方法都是不安全的。
人如其名,这是一个很危险的类,偶然看到一篇文章,觉得很有趣,就顺手记录了下来
特点
Unsafe类是一个不能被继承的类且不能直接通过new的方式创建Unsafe类实例,如果通过getUnsafe方法获取Unsafe实例还会检查类加载器,默认只允许Bootstrap Classloader调用。
既然无法直接通过Unsafe.getUnsafe()的方式调用,那么可以使用反射的方式去获取Unsafe类实例。
获取Unsafe对象
反射获取。老朋友了,不多叙述
1 | // 反射获取Unsafe的theUnsafe成员变量 |
或者
1 | // 获取Unsafe无参构造方法 |
allocateInstance无视构造方法创建类
假设我们有一个类xxx,因为某种原因我们不能直接通过反射的方式去创建UnSafeTest类实例,那么这个时候使用Unsafe的allocateInstance方法就可以绕过这个限制了。
1 | public class xxx { |
使用Unsafe创建UnSafeTest对象:
1 | // 使用Unsafe创建UnSafeTest类实例 |




