unsafe jvm源码
时间: 2023-11-29 20:34:46 浏览: 169
Unsafe类的JVM层面实现可以在OpenJDK的HotSpot虚拟机源码中找到。它的具体实现位于prims目录中的Unsafe.cpp文件。这个文件大约有2000行代码,注释相对较少。如果你对该类的实现感兴趣,你可以下载OpenJDK源码,编译后搭建调试环境来详细分析。不过需要注意的是,调试JVM源码可能需要一些时间和耐心。
在sun.misc.Unsafe源码中,可以看到以下代码:
```
private static final Unsafe theUnsafe = new Unsafe();
private static final jdk.internal.misc.Unsafe theInternalUnsafe = jdk.internal.misc.Unsafe.getUnsafe();```
这段代码定义了一个私有的Unsafe实例theUnsafe,以及一个jdk.internal.misc.Unsafe实例theInternalUnsafe。
更具体的源码可以参考以下代码(基于jdk11的源码):
```
private Unsafe() {}
private static final Unsafe theUnsafe = new Unsafe();
@CallerSensitive
public static Unsafe getUnsafe() {
Class<?> caller = Reflection.getCallerClass();
if (!VM.isSystemDomainLoader(caller.getClassLoader())) {
throw new SecurityException("Unsafe");
}
return theUnsafe;
}
```
这段代码中,构造函数是私有的,通过getUnsafe()方法可以获取Unsafe实例。在该方法中,通过Reflection.getCallerClass()获取调用者的类,然后判断调用者的类加载器是否为系统域加载器,如果不是则抛出SecurityException异常,最后返回theUnsafe实例。
阅读全文