JVM - 类加载机制

回到顶部(go to top)

总结

 

回到顶部(go to top)

1. 加载阶段  (Loading)

简单描述:

在Java程序运行之前JVM会把编译完成的.class二进制文件加载到内存,后续提供程序使用,这里用到的就是类加载器ClassLoader(JVM - 双亲委派机制 Parent-Delegation Model)。

详细描述:

虚拟机需要完成以下3件事情:
1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

 

回到顶部(go to top)

2. 验证阶段(Verification)

验证是连接的第一步,目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危及虚拟机本身的安全。 验证阶段的四个步骤:文件格式检验、元数据检验、字节码检验、符号引用检验。

 

回到顶部(go to top)

3. 准备阶段(Preparation)

正式为类变量分配内存并设置类变量初始值(零值)的阶段,这些变量所使用的内存都将在 (jdk1.7 方法区) (jdk1.8 Metaspace)中进行分配。
这个阶段中进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在Java堆中。

其次,这里所说的初始值“通常情况”下是数据类型的零值,假设一个类变量的定义为:
public static int value=123;
那变量value在准备阶段过后的初始值为0而不是123,因为这时候尚未开始执行任何Java方法

 

回到顶部(go to top)

4. 解析阶段(Resolution)

是虚拟机将常量池内的符号引用替换为直接引用的过程

 

回到顶部(go to top)

5. 类初始化阶段 (Initialization)

这是类加载的最后一步,真正执行类中定义的字节码,也就是.class文件。 初始化阶段是执行类构造器方法的过程,以及真正初始化类变量和其他资源的过程。

类的静态变量静态代码块执行初始化操作.

之前 public static int value=123;这句话,在准备阶段只是赋了零值。在这一步会赋予123的值。

 

posted on   frank_cui  阅读(51)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-12-15 java JDBC
2018-12-15 Hibernate 注解
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

levels of contents
点击右上角即可分享
微信分享提示