当咱们调用Java命令运行某个Java程序时,该命令将会启动一个Java虚拟机进程,无论该Java程序有多么复杂,该程序启动的全部线程,全部变量都处于该Java虚拟机进程里,它们都使用该JVM进程的内存区。当系统出现如下几种状况时,JVM进程将被终止。java
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,而后在堆区建立一个java.lang.Class对象,用来封装类在方法区内的数据结构。程序员
不管类的示例有多少个,该类的Class对象只有一个,且经过查看源码知道,Class的构造方法为私有的,只有JVM才能建立该对象。安全
/* * Constructor. Only the Java Virtual Machine creates Class * objects. */ private Class() {}
加载.class文件的方式:从本地系统中直接加载本身编译后的.class文件或者从zip,jar等归档文件中加载.class文件数据结构
类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,而且向Java程序员提供了访问方法区内的数据结构的接口spa
类加载器的分类:线程
Java虚拟机自带的加载器code
用户自定义的类加载器对象
类加载器并不须要等到某个类被“首次主动使用”时再加载它,JVM规范容许类加载器在预料某个类将要被使用时就预先加载它,若是在预先加载的过程当中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误),若是这个类一直没有被程序主动使用,那么类加载器就不会报告错误。blog
类被加载后,就进入链接阶段。链接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去。接口
类的初始化步骤
类的加载器机制
类加载器用来把类加载到Java虚拟机中。类的加载机制采用父亲委托机制,这种机制能更好的保证Java平台的安全。
在此机制中,除了Java虚拟机自带的根类加载器之外,其他的类的加载器都有且只有一个父加载器。