虚拟机类加载机制

虚拟机的类加载机制指的是什么?

答:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。


java有多少个类加载器?分别的作用是什么?一个Class文件是怎么被加载到JVM里的,描述一下加载流程。

答:java有三个类加载器,分别为:根类加载器,扩展类加载器,系统类加载器。

根类加载器负责java核心类的加载,扩展类加载器负责扩展jar包的加载;系统类加载器负责自定义类的加载。

类加载的全过程包括加载验证准备解析初始化5个阶段。其中,验证、准备、解析三个部分统称为连接。

加载阶段。虚拟机利用类加载器将Class文件加载到内存中,准确的讲,是加载到内存中的方法区,并为这个Class文件生成一个Class文件对象(类的字节码对象),作为方法区中这个Class文件的访问入口。(注意,Class文件存放在方法区,但是Class文件对象并不一定存放在堆中,还可能在方法区中)

验证阶段。这一阶段的目的是为了确保Class文件的中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

准备阶段。这一阶段是正式在方法区内为类变量分配内存,并设置初始值。这里有两个特别容易混淆的概念需要强调一下。首先,这个时候进行内存分配的类变量指的仅是静态变量,而不是成员变量(实例变量),成员变量将会在对象实例化时随着对象一起分配在堆内存中。其次,这里的初始值指的是数据类型的零值(假设有一个类的静态变量为static int value = 123,那变量value在准备阶段过后的初始值为0而不是123)。

解析阶段。这一阶段是将类文件中的符号引用替换为直接引用。

初始化阶段。执行类中定义的java代码,初始化类变量和其它资源(假设有一个类的静态变量为static int value = 123,准备阶段过后,value初始值为0,而初始化阶段,就是执行java代码,将123赋给valuevalue的初始值为123)。

 

类加载的时机?(什么情况下会将类文件加载到内存中?)

答:创建类的实例

调用类中的静态变量和静态方法。

初始化类的子类

对类进行反射调用的时候

虚拟机启动时,会初始化包含main()函数的那个类


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值