前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM类加载机制-JVM(一)

JVM类加载机制-JVM(一)

作者头像
用户9919783
发布2023-09-05 14:29:51
1550
发布2023-09-05 14:29:51
举报
文章被收录于专栏:后端从入门到精通

1、我们运行一个.class文件,windows下的java.exe调用底层jvm.dll文件创建java虚拟机(c++实现)。

2、创建一个引导类加载器实例(c++实现)

3、C++调用java代码Launcher,该类创建其他java类加载器。

4、Launcher.getClassLoader()调用loaderClass加载运行类Math

5、classLoader.loader(“com.jvm.math”)加载main方法入口

6、Main运行java程序

一、类的加载

加载分为 验证、准备、解析、初始化

1、验证

.class里开头是cafe babe是字节码开头格式

如果开头不是这个,则代表不是字节码.class文件。

2、准备

类里的静态变量分配内存,先赋默认值,比如对象会先赋值为null,int会赋值为0,boolean的话会赋值为false等。加载完后才会给真实的值。

(注意:final是常量,直接赋值真实的值,加了final就是常量,不可变)

3、解析(比较复杂)

先将符号引用转成直接引用,该阶段把静态方法(比如main方法)替换为指向数据所存内存的指针,这就是所谓静态链接过程(类加载期间完成),动态链接是程序运行期间完成的将符号引用替换为直接引用。

(举个例子:main方法这一行都属于静态数据,会转换成内存里的指针,属于静态链接。而main方法里调用的其他方法,这种就属于动态链接。)

4、初始化

对类的静态初始化指定值,执行静态代码块。

最后运行 和 结束。

Jvm属于懒加载,只有依赖的时候才会去加载。

比如静态代码块,只有在加载某个类的时候执行,效果类似。

先加载类里的静态代码块,构造方法是在类加载之后调用的,因为必须类加载完构造方法初始化才可以执行,类都没加载完,构造函数必定执行不了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档