当前位置:网站首页>JVM的类加载过程
JVM的类加载过程
2022-06-21 19:23:00 【斯沃福德】
1. 加载
java源代码编译为字节码后,然后通过类加载器加载字节码到方法区中,并根据Class 文件描述在堆中创建 java.lang.Class 对象
2. 链接
2.1. 验证:
验证字节码是否符合虚拟机规范 ,不合法的将会报错ClassFormatError
2.2. 准备:
2.为static静态变量分配空间,设置默认值
JDK1.6中静态变量在方法区,现在的JDK1.8 中静态变量在堆中
static静态变量分配空间和赋值是两个步骤,分配空间在准备阶段完成,赋值在初始化阶段类的构造中完成
· 如果是static final 基本类型特殊,值在编译阶段就确定了,赋值在准备中完成
· 如果是static final 引用类型,那么赋值也会在初始化阶段完成
2.3. 解析:
指的是将常量池中的符号引用解析为直接引用,
符号引用仅仅是符号,并不知道类、方法在内存的什么位置,但是经过了解析之后,就知道了类、方法在内存的确切位置
loadClasss()方法只加载,但不会导致类的解析和初始化
new() 会做解析和初始化
3. 初始化
初始化就是去执行类的构造方法,虚拟机会保证这个类的构造方法的线程安全
发生时机:
初始化是懒惰的
main方法时间首先会被初始化
首次访问这个类的静态变量(不是final的),静态方法时
子类的初始化:如果父类还没初始化会先初始化父类
子类访问父类的静态变量,只会触发父类的初始化,子类并不会被初始化
Class.forName会导致类的初始化 (newInstacnce()方法会执行无参构造)
new()对象会导致初始化
不会导致初始化:
访问static final静态常量(基本类型、字符串)不会触发初始化,其都在链接的准备阶段就完成了变量的赋值
使用ClassLoader默认的loadClass方法加载类时不会触发该类的初始化
创建类的数组不会导致初始化
在子类引用父类的静态字段时,不会触发子类的初始化,只会触发父类的初始化。
loadClasss()方法只加载,但不会导致类的解析和初始化
边栏推荐
- Extend the clean, fresh and dense bag, and put a "safety lock" on the ingredients
- 异步方法 理解(demo附代码)
- EasyCVR智能边缘网关硬件如何设置通电自启动?
- Henkel database custom operator '! ~~'
- It is said that the price of the iPhone 14 will rise; TikTok US user data is transferred to Oracle, and bytes cannot be accessed; Seatunnel 2.1.2 releases geek headlines
- Which futures account opening platform is good? What are the safe and regular futures companies?
- Jenkins regularly builds and passes build parameters
- LeeCode70 爬楼梯
- ADUM1401ARWZ-RL 亚德诺 数字信号隔离模块
- SQL教程之数据科学家需要掌握的五种 SQL 技能
猜你喜欢

获取OpenHarmony源码:从DevEco Marketplace获取(1)

STL之vector扩容机制

Post Gartner webinar "nine questions on digital transformation"

MySQl学习(从入门到精通 1.2)

TX9116同步升压ic

用户态热补丁原理与应用

Data path: three people walk, there must be my teacher!

Alibaba cloud ack one and ACK cloud native AI suite have been newly released to meet the needs of the end of the computing era

MySQL CentOS installation MySQL L8

FM5012D小风扇集成ic方案
随机推荐
Goldfish rhca memoirs: do447 managing user and team access
数据路:三人行,必有我师!
Extend the clean, fresh and dense bag, and put a "safety lock" on the ingredients
Delete the penultimate node - linked list topic
运维监控数据可视化-让数据自己会说话[华汇数据]
Influxdb optimization configuration item
Post Gartner webinar "nine questions on digital transformation"
决策树(Decision Tree)学习笔记
文件编译过程
FANUC机器人进行全部备份和镜像备份以及加载备份文件的具体操作(图文)
Ns32f103vbt6 hardware and software replace stm32f103vbt6
函数的声明方式
什么是eGFP,绿色荧光蛋白
What is redis hyperloglog? The use of these scenes makes me laugh like a dragon
基于 PCA 的人脸识别系统及人脸姿态分析
#夏日挑战赛# 用OpenHarmony eTS 实现一个Huawei app标准布局
亿腾医药在港招股书第三次“失效”:上市实质延后,红杉等为股东
STL之vector扩容机制
什么比国内现货白银更有优势?
异步方法 理解(demo附代码)