Java JVM(入门篇04)类加载的过程 和 对象 产生的内存分析.
一、类加载的过程.
1. 上图
2. 具体分析
1.加载:使用ClassLoader把 .class 文件写入到方法区内存
2.链接
- 2.1验证:判断编译是否能通过
- 2.2准备:加载static,和final到方法区(这里static会赋默认值,final赋指定值)
- 2.3.解析(将常量池中的符号引用替换为直接引用)
(1)符号引用:就是 final float PI 中的 PI 就是符号
(2)直接引用:final float PI 的 PI的方法区的地址2341410x 就是直接引用
(3)解析阶段,JVM会吧所有的类名,方法名,字段名,的符号引用替换为内存地址的直接引用。
3.初始化:给默认的static赋值 和 执行static静态代码块 - 父类没有初始化就先初始化父类
二、对象产生的内存解析
-
会先把main所在的类
Demo类Class模板放到方法区,
然后栈中压栈执行main方法 -
new Person()就会去方法区
寻找有无Person 的 Class
发现无,就加载Peron的Class模板到方法区 -
Perso模板加载到方法区后
就通过模板创建对象在堆区
然后栈区储存变量的引用“zhangsan”
更多:
- 加载static main() 方法的时候就会吧“张三"储存在Demo Class 的常量区(隶属方法区)
- 然后zhangsan 在堆中的 对象的 name 值 “张三” 调用的 方法区 Demo class 模板 里面的 “张三”