不知道和你了解的类加载有没有区别

1.Java虚拟机的生命周期:

       每个java程序启动都会由虚拟机创建一个java虚拟机实例,那么这个java程序就会在本身的java虚拟机实例上运行,当该java程序关闭退出,本身的java虚拟机实例也会随之消亡.

 

2.Java虚拟机运行时的数据区:

       每个java虚拟机实例都有方法区,堆内存,栈内存,,PC寄存器

1):方法区:它是每个虚拟机实例中所有的线程所共享的,,当虚拟机加载一个class文件时,它会从这个class文件中所包含的二进制数据中解析信息,然后把这些信息放到方法区中;

 

2):堆内存:当java程序运行时,虚拟机会把所有该程序运行时创建的对象放到堆内中;

 

3)栈内存:总是存储java程序中线程调用方法的状态,包括它的局部变量,被调用时传进来的参数,返回值,以及运算的中间结果等,栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态,当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中,当该方法返回时,这个栈帧就被从Java栈中弹出并抛弃;

 

4):PC寄存器(也叫程序计数器):如果线程正在执行的是一个Java方法,那么PC寄存器的值总是指向下一条将被执行的指令.

 

3.Java虚拟机的类加载子系统:

              1):在Java虚拟机中,负责查找并加载类型的那部分成为类加载子系统,有两种类加载器,分别为启动类加载器和用户自定义类加载器,前者是Java虚拟机实现的一部分,后者是Java程序的一部分,由不同的类加载器加载的类将被放在虚拟机内部的不同命名空间中;

 

              2):用户自定义的类加载器就是普通的Java对象,它的类必须派生自java.lang.ClassLoader类,ClassLoader中定义的方法为程序提供了访问类加载器机制的接口;

 

              3)类加载器子系统除了要定位和导入二进制class文件外,还必须负责验证被导入类的正确性,为类变量分配并初始化内存,以及帮助解析符号引用.这些动作必须严格按照以下顺序进行:

                     a)加载 ----- 查找并加载类型的二进制数据

                     b)连接 ----- 指向验证,准备以及解析

                            验证: 确保被导入类型的正确性

                            准备:  为类变量分配内存,并将其初始化为默认值

                            解析:  把类型中的符号引用转化为直接引用

                     c)初始化 ----- 把类变量初始化为正确的初始值

              4)类加载器的特性:

                     a)每个Java虚拟机实现都必须有一个启动类加载器,它们知道怎么加载受信任的类,有自己的命名空间,其中维护着由它装载的类型,所以一个Java程序可以多次加载具有同样的全限定名的多个类型,.

 

                     b)虚拟机必须为每个被加载的类型维护一个常量池,常量池就是该类型所用常量的一个有序集合,包括直接常量和对其他类型,字段和方法的符号引用.池中的数据就像数组一样是通过索引访问的.因为常量池存储了相应类型所用到的所用类型,字段和方法的符号引用,所以它在Java程序的动态连接中起着核心的作用.

4.类加载机制:

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

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

       3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区中中这些数据的访问入口:

       注意:二进制字节流并不只是单纯地从class文件中获取,它还可以从jar包中获取,从网络中获取.整个类加载过程中,除了在加载阶段用户应用程序可以自定义类加载器参与之外,其余所有的动作完全由虚拟机主导和控制.到了初始化才开始执行类中定义的Java程序代码,类加载过程中主要是将Class文件,也就是类的二进制文件加载到虚拟机内存中,真正执行字节码的操作,在加载完成后才真正开始.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值