jvm类的加载过程

类的加载过程:

加载    链接:( 验证  准备   解析)   初始化   使用  卸载 

加载: classpath   jar包   网络,磁盘位置。类的class 二进制字节流都进来。 在内存中生成  java.lang.Class 对象放进元空间。   此阶段可以干预,自定义类的加载器实现类的加载。

验证 : 验证Class文件的字节流包含的信息符合《java虚拟机规范》的全部约束要求。保证虚拟机的安全。    class文件的二进制 cafe babe 魔法头

准备: 类变量赋值   int 为 0  long  0L  boolean 为false  引用类型是null。 常量赋正式值。

解析: 把符号引用翻译为直接引用。

初始化:  new 类的时候, 访问类的静态属性。 修改静态属性。 调用静态方法 。反射调用。 初始化类,父类也会被初始化。

使用: 使用这个类。

卸载:  GC。  1。该类的所有实例都被gc   。jvm不存在该类的实例     2.加载类的ClassLoader 被gc。 3,没有引用。   (一般不卸载类。)

一个类被初始化的过程:

使用时候:  先加载。   赋值静态变量,  静态代码快。   new对象时候,按照代码顺被,初始化代码块,构造器。 

继承时父子类的初始化顺序:

    先加载父类。在加载子类。

    类的顺序,按照类的加载顺序执行。 

    父类:静态变量。静态初始化快。子类:静态变量。静态初始化快。new时:父类变量,初始化快,构造器。子类变量,初始化快,构造器

什么是类加载器:   

    在类的加载阶段,通过一个类的全限定名来获取描述该类的二进制字节流的这个动作的代码,被称为类加载器。这个动作是可以自定义实现的。

    

JVM有那些类加载器:

    虚拟机角度看。分为 2种,启动类加载器(Bootstrap ClassLoader),其他类加载器,继承抽象类java.lang.ClassLoader。

    站在JDK角度看, 1.2开始保持3层类加载器架构。

JVM种不同的类加载器 加载那些文件?

1.启动类加载器(Bootstrap Classloader):C++<JAVA_HOME>\jre\lib\rt.jar,resources.jar.charsets.jar    或 -Xbootclasspath参数指定的路径种存放的类库。

2.扩展类加载器(Extension ClassLoader):JAVA语言实现的

sun.misc.Launcher$ExtClassLoader

jre\lib\ext.

被java.ext.dirs系统变量指定的路径中所有的类库。

3.应用程序类加载器。Application ClassLoader:系统的类加载器:JAVA语言实现的

sun.misc.Launcher$AppClassLoader

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单洪峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值