yym带你了解jvm源码,openjdk11源码,java类jvm加载原理
jdk11中java类在jvm是如何被1查找、2加载
以下说明的是MiDept类是如何被java classloader 和 jvm加载步骤
上源代码
public static void main(String[] args) {
Thread.currentThread().setName("yym");
MiDept miDept = new MiDept();
System.out.println(miDept.show(123456));
}
public class MiDept {
public String show(int data) {
System.out.println("mi--------------"+data);
return "yym-invoke-method";
}
}
一、java层查找步骤
findLoadedClass0
AppClassLoader->PlatformClassLoader->BootClassLoader
AppClassLoader<-PlatformClassLoader<-BootClassLoader
在native层函数
private final native Class<?> findLoadedClass0(String name);
jvm源码查找步骤
1、对应jni的findLoadedClass0方法
2、
3、查找klass
4、字典中查找klass
5、返回klass实例
二、java层加载步骤
AppClassLoader->PlatformClassLoader->BootClassLoader
AppClassLoader<-PlatformClassLoader<-BootClassLoader
在native层函数
static native Class<?> defineClass1(ClassLoader loader, String name, byte[] b, int off, int len, ProtectionDomain pd, String source);
jvm源码加载步骤
1、对应jni方法
2、
3、
4、从文件中加载klass
5、
6、创建klass实例
7、加载完成返回klass
8、更新字典
9、添加klass到字典
10、返回klass镜像对应java的class类对象