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,,学习不错的参考

posted @ 2017-06-30 22:54  白杨树下  阅读(4726)  评论(0编辑  收藏  举报