JVM加载Class文件的原理机制是什么?

  • A+
所属分类:JAVA


共计 675 个字符,预计需要花费 2 分钟才能阅读完成。

JVM是通过类加载器(ClassLoader)将Class字节码文件加载进内存的;

根加载器BootStrap):一般由本地代码实现,主要负责的是JVM基础核心库类装载(如rt.jar
扩展加载器 (Extension):从BootStrap继承而来,负责加载java.ext.dirs系统属性指定目录中的类库;
系统加载器System):别名应用类加载器,继承自Extension,应用最为广泛的,负责从环境变量classpath或者系统属性java.class.path指定目录中装载类;
用户自定义加载器:默认继承自System,特殊定制加载需求才会使用;

开发编写.java文件经过编译生成.class字节码文件,又称类文件,不可执行需要以下几步;

通常是创建一个字节数组读取.class文件中数据进入内存,接着就会产生与所加载类对应的Class对象;

此时的Class对象仍不完整,不可用,需要经过验证、准备(为静态变量分配内存并设置默认的初始值)、解析(将符号引用替换为直接引用)三步;

当前被加载的类存在直接父类且还未被初始化,先初始化父类(重复此三步:加载连接初始化);
如果存在初始化语句,依次执行这些语句(在父类加载的时候也需要做);

开始于JDK 1.2,英文缩写PDM;

JVM自带的BootStrap是根加载器,其他的加载器有且仅有一个父类加载器;
类的加载首先请求父类加载器,父类加载器加载不了时,再由器子类加载器加载
JVM不会向Java程序开放任何对BootStrap的接口;

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: