JVM类加载机制

Java源文件经过编译成为了.class二进制字节码文件,那么下面我们需要去解释这个文件,也就是装载它。

类型的生命周期:

一个类型(类或接口)的生命周期,从开始阶段,装载,连接和初始化,以及占Java类型生命周期绝大部分时间的对象实例化,垃圾回收和对象终结,然后是Java类型生命周期的结束,也就是从虚拟机中卸载。这就是一个类型的完整生命周期。

那么装载(加载)是什么呢?

装载就是把二进制形式的Java类型读入到Java虚拟机中。

类型是如何被装载,装载到虚拟机之后又变成了怎么样的形式呢?

我们慢慢来解释。

类装载器的分类:

1.“启动”(bootstrap)类装载器:虚拟机实现的一部分,通常使用默认形式从本地磁盘中装载类,包括java API类库。说明白点,这种类装载器就本身JVM所有的,跟我们用户没有多大的关系。

2.用户自定义装载器,使用自定义的方式装载类。

装载阶段由三个基本动作组成,要装载一个类型,java虚拟机必须:

1.通过该类型的完全限定名,产生一个代表该类型的二进制数据流;

2.解析这个二进制数据流为方法区的内部数据结构(解析到了方法去哦~~)

3.创建一个表示该类型的 java.lang.Class 类的实例(反射,反射)

装载步骤的最终产品就是这个Class类的实例对象,它成为Java程序与内部数据结构之间的接口,要访问该类型的信息(它们就是存储在内部数据结构中的),程序就需要调用该类型对应的Class实例对象的方法。这样的一个过程,就是把一个类型的二进制数据解析为方法区中的内部数据结构,并且在堆上建立一个Class对象的过程,这被称为“创建”类型。

类装载器的层级结构:


关于类装载过程的:双亲委派模式

在Java1.2中引入了类装载器的形式化双亲委派模型,它的作用就是防止内存中出现多份同样的字节码

当JVM加载一个类时,下层的类装载器会将任务委托给上一层的类装载器,上一层的类装载器检查它的命名空间是否已加载,若已加载,直接返回并使用;若没有加载,继续往上委托至顶部,检查完了之后,按照相反的顺序加载。如果bootstrap类装载器找不到这个类,往下委托,直到找到他并加载他。

 

这就是双亲委派模式,突然觉得有木有觉得像Android中的 View的拦截原理,哈哈?

View的拦截原理也是:从父View到子View,判断 onInterceptTouchEvent 方法返回是否为true,若为true,则表示拦截成功,马上将这个动作交给 onTouchEvent方法处理,如果onTouchEvent方法返回true,则表示这个动作已经被这个View给消费。如果返回false,则交给这个View的父View去消费,调用父View的onTouchEvent方法。如果onInterceptTouchEvent方法返回的是false,那么就交给这个View的子View去拦截。哈哈有没有发现惊人的相似呢?不过MotionEvent事件的消费是先自顶向下来拦截,然后是自底向上进行消费这个动作。后面再详细地讲讲吧。

类加载机制,就先说到这里啦~~~有什么,错误的,不得当的地方还请指出谢谢。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值