JVM类加载机制原理

之前看了JVM运行时数据区的一些内存模型的相关知识点,今天总结类加载机制和GC垃圾回收机制。首先先了解一下JVM都包含那些部分

这个图就是JVM包含的内容,类加载器、运行时数据区、执行引擎、本地接口、本地库。

上图说明了类加载机制的一个执行过程,分为加载、连接、初始化、使用、卸载,这也是一个类的生命周期。 

那么我们就分块看这几个操作:

  • 加载:加载就是类加载器将.class文件通过类的全限定名(包名+类名,有点类似于绝对路径)加载到内存中。
  • 校验:也可以说是验证,就是确定.class文件符合JVM规范,也可以理解成class文件包含的信息符合当前虚拟机的需求
  • 准备:为类的静态属性分配内存。并且设置初始值,比如private static int =3;这个时候准备阶段初始值是0,并不是3,因为还没有执行赋值的操作。
  • 解析:将符号引用转化为直接引用(这一过程也是静态链接)
  • 初始化:根据程序中的赋值语句为类中静态变量赋值。这里面有几点需要注意:就是如果有继承关系,先初始化父类。
  • 使用:就是使用这个class,也就是说执行程序调用这个类的代码。
  • 卸载:就是不在使用class,JVM销毁当前类的class对象。

 那么刚开始说了加载阶段是类加载器将.class文件加载到内存当中的,那么类加载器有哪些呢?

  • 启动类加载器
  • 扩展类加载器
  • 应用程序类加载器
  • 自定义加载器

我们知道类加载器是将class文件加载到内存当中,那么这几个加载器有什么作用呢,首先我们先了解下双亲委派模型:

 双亲委派模型的工作原理就是当一个类加载器收到了一个类加载的请求之后,它并不会自己加载,而是给父类加载器加载,这样层层传递,最终都会传到最上层的启动类加载器,如果父类类加载器可以加载,就自己处理,成功返回,如果父类加载器不能加载,才会由子类加载器加载。这样做的好处是什么呢?

  • 避免重复加载,父类加载完毕,就不需要子类继续加载了
  • 更加安全,要不使用这种方式,可以随便定义类加载器去加载核心api这样会造成相当大的隐患。

自定义加载器

  • 因为系统的ClassLoader只会加载指定目录下的class文件,如果你想加载自己的class文件,那么就可以自定义一个ClassLoader.而且我们可以根据自己的需求,对class文件进行加密和解密。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值