java虚拟机类加载机制

一、java虚拟机类加载分7个阶段。2.3.4称为连接

1.加载:读取类的二进制字节流,放到方法区建立运行时数据结构,内存中建立一个java.lang.Class对象,作为访问入口。

     ①当遇见new ,static 关键字。②反射方法。Class.forName()会进行加载。当然需要先初始化,还要考虑父类加载。

2.验证:这一阶段的目的是确保class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机自身的安全

3.准备:该阶段就是为类变量分派内存空间并设置类变量初始值。这里的类变量:类中static修饰的变量;不包括实例变量。初始          化:值为0;并不执行方法。

4.解析:解析就是虚拟机将常量池中的符号引用替换成直接引用的过程

5.初始化:执行对象的构造函数。

6.使用

7 .卸载

  二、有且只有5种jvm执行初始化的情况:

1。在.class文件中有 new、getstatic、putstatic、invokestatic

2.反射

3.初始化一个类,发现父类还未初始化,先初始化父类

4.执行的主类main

5.........

三、类加载器定义:实现某功能的代码模块。这个功能:通过一个类的全限定名来描述类的二进制子节流,把这个动作放到虚拟机外部去实现,让程序自己去获取需要的类。

类加载器分类:

    1.启动类加载器:是c++编写的,无法被java程序直接调用

    2.扩展类加载器:负责加在java_home/lib/ext中内容。可以由开发者调用

    3.应用程序类加载器:用来加在用户路径指定的类库。可以由开发者调用

四、双亲委派模式:当前类加载器加载某个类的时候,如果没有找到,首先调用的父类加载器,如果父类加载器没有找到这个类,则再往上的父类查找,一直到顶层的启动类加载器,如果还是找不到,则启动类加载器尝试加载这个类,如果没有加载成功,则返回空给子加载器,子加载器如果也没有加载到,则继续往下的类加载器走,一直到当前类加载器。

作用:包中java程序稳定运行。如果用户自定义一个rt.jar,不用双亲,就会加载用户自定义的,会乱。

六、破坏双亲委派模式

1.在ClassLoade中添加findClass()

2.线程上下文设计

3.OSGi实现模块化热部署。用来热部署一些模块。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值