本文参考自“《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程 ”,对原内容作了些修改并重新组织
JVM启动、加载类过程
下面我将定义一个非常简单的java程序并运行它,来逐步分析java虚拟机启动的过程。
package org.luanlouis.jvm.load;
import sun.security.pkcs11.P11Util;
/**
* Created by louis on 2016/1/16.
*/
public class Main{
public static void main(String[] args) {
System.out.println("Hello,World!");
ClassLoader loader = P11Util.class.getClassLoader();
System.out.println(loader);
}
}
根据JVM内存配置要求,为JVM申请特定大小的内存空间;
JVM启动时按照其配置要求,申请一块内存,并根据JVM规范和实现将内存划分为几个区域。class二进制文件信息被放入“方法区”,对象实例被放入“java堆”等。关于JVM内存模型内容参考 JVM(一)JVM内存模型
创建一个引导类加载器实例,初步加载系统类到内存方法区区域中;
JVM申请好内存空间后,JVM会创建一个引导类加载器(Bootstrap Classloader)实例,引导类加载器是使用C++语言实现的,负责加载JVM虚拟机运行时所需的基本系统级别的类,如
java.lang.String
,java.lang.Object
等等。