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静态代码块
  • 父类没有初始化就先初始化父类

二、对象产生的内存解析

在这里插入图片描述

  1. 会先把main所在的类
    Demo类Class模板放到方法区,
    然后栈中压栈执行main方法

  2. new Person()就会去方法区
    寻找有无Person 的 Class
    发现无,就加载Peron的Class模板到方法区

  3. Perso模板加载到方法区后
    就通过模板创建对象在堆区
    然后栈区储存变量的引用“zhangsan”

更多:

  • 加载static main() 方法的时候就会吧“张三"储存在Demo Class 的常量区(隶属方法区)
  • 然后zhangsan 在堆中的 对象的 name 值 “张三” 调用的 方法区 Demo class 模板 里面的 “张三”
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章