尽管有传言JAVA9可能会移除Unsafe类,但不妨碍我们理解它的原理。因为类不在了,native方法还在那里。就像菜换样了,食材就那些没变。一个好厨师不仅仅需要会做菜,还需要能识别食材特性...来吧,直接上干货。
注:强烈不建议程序中自己调用Unsafe类方法,这一点没有质疑。
目录
1.前言
2.Unsafe中的native方法
3.Unsafe中的上层方法
=======正文分割线======
一、前言
在JDK8中追踪可见sun.misc.Unsafe这个类是无法看见源码的,打开openjdk8源码看
目录:openjdk-8-src-b132-03_mar_2014\openjdk\jdk\src\share\classes\sun\misc
此类包含了低级(native硬件级别的原子操作)、不安全的操作集合。
获取Unsafe实例静态方法:
1 private Unsafe() {} 2 3 private static final Unsafe theUnsafe = new Unsafe(); 4 5 @CallerSensitive 6 public static Unsafe getUnsafe() { 7 Class<?> caller = Reflection.getCallerClass(); 8 if (!VM.isSystemDomainLoader(caller.getClassLoader())) 9 throw new SecurityException("Unsafe"); 10 return theUnsafe; 11 }
二、底层native方法(底层C++不拓展了)
共计82个public native,下面列出了核心方法:
1 //扩充内存 2 public native long reallocateMemory(long address, long bytes); 3 4 //分配内存 5 public native long allocateMemory(long bytes); 6 7 //释放内存 8 public native void freeMemory(