jvm虚拟机类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。


加载:

①通过一个类的全限定名来获取定义此类的二进制字节流

②将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构

③在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

验证:

确保Class文件的字节流中包含的信息符合当前虚拟机的要求

准备:

解析:

初始化:通常是执行类构造器


类加载器

通过一个类的全限定名来获取描述此类的二进制字节流


比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义。否则即使这两类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。


双亲委派模型


如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法加载这个加载请求时,子加载器才会尝试自己去加载。


问:如果基础类要调用回用户的代码,怎么办?比如JNDI。

答:引入线程上下文加载器

问:代码热替换,模块热部署如何做到的?

答:自定义的类加载器机制实现。每一个程序模块(OSGI中称为Bundle)都有一个自己的类加载器,当需要更换一个Bundle时,加把Bundle连同类加载器一起换掉以实现代码的热替换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值