上一篇文章,介绍了java虚拟机的运行时区域,Java虚拟机根据不同的分工,把内存划分为各个不同的区域。在java程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个
方法。通过上一篇文章我们知道调用某个方法是通过虚拟机栈的栈帧并通过执行引擎来实现的,但是实际上一个方法的执行前提是,该对象对应的Class文件需要加载到内存的方法区,并且
要new一个对象,对象的引用存放在虚拟机栈的本地变量表,对象的实例存放在堆。本篇文章关注的重点就是Java虚拟机如何将Class文件加载到内存。
Java虚拟机把类描述的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这个过程被称作虚拟机的类加载机制。在java语言
里,类型的加载、连接、初始化都是在程序运行期间完成的,这种策略让java语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销,但是确为java应用提供了极高的扩展性
和灵活性,java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。