C++调用Java代码创建JVM启动器实例,该类由引导类加载器负责加载创建其他类加载器<div data-t="flow" data-processon-v="{"list":[{"linkerType":"broken","lineStyle":{"lineColor":"92,92,92","lineWidth":2},"name":"linker","from":{"x":371.7222222222226,"y":273.4444444444444,"angle":null,"id":null},"id":"16a85e6681e2dc","to":{"x":371.7222222222226,"y":375.0277777777777,"angle":null,"id":null},"text":"C++调用Java代码创建JVM启动器实例,\n该类由引导类加载器负责加载创建其他类加载器","locked":false,"points":[{"x":371.7222222222226,"y":324.23611111111103},{"x":371.7222222222226,"y":324.23611111111103}],"dataAttributes":[],"group":"","props":{"zindex":10},"textPos":{"x":371,"y":321,"t":19,"pos":"in"}}],"client":"1674892097064JWxKHlFbyb283498"}"></div>
sun.misc.Launcher.getLauncher()
获取运行类自己的类加载器ClassLoader,AppClassLoader实例
launcher.getClassLoader()
加载<br>
在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,<br>在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
解析
将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或者句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用
初始化
对类的静态变量初始化为指定的值,执行静态代码块
使用
卸载
调用loadClass方法加载要运行的类,也就是Math
classLoader.loadClass("Math")
加载完成时候JVM会执行Math类的main方法入口
Math.main()