标签:
JVM:Java Virtual Machine,负责执行符合规范的Class文件。
JRE:Java Runtime Environment,包含JVM和类库。
JDK:Java Development Kit,包含JRE和一些开发工具,如javac。
JVM实例对应了一个独立运行的java程序,而JVM执行引擎实例则对应了属于用户运行程序的线程;也就是JVM实例是进程级别,而执行引擎是线程级别的。
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描
Bootstrap ClassLoader负责加载$JAVA_HOME/jre/lib里所有的类库到内存,Bootstrap ClassLoader是JVM级别的,由C++实现,不是ClassLoader的子类,开发者也无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
Extension ClassLoader负责加载java平台中扩展功能的一些jar包,主要是由 sun.misc.Launcher$ExtClassLoader实现的,是一个java类,继承自URLClassLoader超类。它将负责%JRE_HOME/lib/ext目录下的jar和class加载到内存,开发者可以直接使用该加载器。
App ClassLoader负责加载环境变量classpath中指定的jar包及目录中class到内存中,开发者也可以直接使用系统类加载器。
Custom ClassLoader属于应用程序根据自身需要自定义的ClassLoader(一般为java.lang.ClassLoader的子类)在程序运行期间,通过java.lang.ClassLoader的子类动态加载class文件,体现java动态实时类装入特性,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader。自定义ClassLoader在某些应用场景还是比较适用,特别是需要灵活地动态加载class的时候。
JVM虚拟机(转自:http://blogread.cn/it/article/7601?f=wb)
标签:
原文地址:http://www.cnblogs.com/he0xff/p/5257522.html