首页 > 代码库 > JVM加载.class文件的原理机制
JVM加载.class文件的原理机制
当java编译器将.java文件编译成.class文件后,需要JVM执行.class文件,将class文件加载到内存中,从而对数据进行校验、解析和初始化。
1、类加载的一般过程
(1)寻找jre目录,寻找jvm.dll,并初始化JVM;
(2)产生一个Bootstrap Loader(启动类加载器);
(3)Bootstrap Loader自动加载Extended Loader(标准扩展类加载器),并将其父Loader设为Bootstrap Loader。
(4)Bootstrap Loader自动加载AppClass Loader(系统类加载器),并将其父Loader设为Extended Loader。
(5)最后由AppClass Loader加载HelloWorld类。
2、类加载器(次部分参考csdn一些博客)
类加载器(class loader)用来把Java 类动态的加载到 Java 虚拟机中。也就是说当程序需要某个类时,类加载器就把这个类的二进行加入到虚拟机中。
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:
(1)引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader
。
(2)扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
(3)系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()
来获取它。
3、加载类的过程
(1)装载:查找和导入Class文件;
(2)链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的:
a) 校验:检查载入Class文件数据的正确性;
b) 准备:给类的静态变量分配存储空间;
c) 解析:将符号引用转成直接引用;
(3)初始化:对类的静态变量、静态代码块执行初始化工作。
csdn一篇博文讲的很好,地址如下http://blog.csdn.net/ns_code/article/details/17881581,,学习不错的参考
JVM加载.class文件的原理机制