目录

Giles 的个人博客

里面空无一物,充满了声音和狂热

标签: JVM (2)

类加载器子系统与SPI

类加载器 JVM中有两种类型的类加载器,由C++编写的及由Java编写的。除了启动类加载器(Bootstrap Class Loader)是由C++编写的,其他都是由Java编写的。由Java编写的类加载器都继承自类java.lang.ClassLoader。 JVM还支持自定义类加载器。后面会将。 各种类加载器之间存在着逻辑上的父子关系,但不是真正意义上的父子关系,因为它们直接没有从属关系。 启动类加载器 因为启动类加载器是由C++编写的,通过Java程序去查看显示的是null 因此,启动类加载器无法被Java程序调用 启动类加载器不像其他类加载器有实体,它是没有实体的,JVM将C++处理类加载的一套逻辑定义为启动类加载器 查看启动类加载器的加载路径 URL[] urLs = Launcher.getBootstrapClassPath().getURLs(); for (URL urL : urLs) { System.out.println(urL); } 也可以通过-Xbootclasspath指定 从openjdk源码 int JNICALL JavaMain(void ......

JVM底层之类加载

JVM底层之类加载 klass模型 Java的每个类,在JVM中,都有一个对应的Klass类实例与之对应,存储类的元信息如:常量池、属性信息、方法信息…… 看下klass模型类的继承结构 从继承关系上也能看出来,类的元信息是存储在原空间的 类加载器将.class文件加载进系统 将.class文件解析,生成的就是InstanceKlass MetaspaceObj JDK8以后类的元信息都是存储在类的元空间里的就是MetaspaceObj 是所有类的顶层父类。 InstanceKlass InstanceKlass就是我们写的Java类(非数组),InstanceKlass就是类加载器把Java文件存储到内存中经过解析后生成的。 InstanceKlass包含的一些属性:注解 _annotations、__method.. 普通的Java类在JVM中对应的是instanceKlass类的实例,再来说下它的三个子类 InstanceMirrorKlass:用于表示java.lang.Class,class对象(就是我们所说的堆区就是存储在这里)Java代码中获取到的Cl....