对象的内存图

  • 一个对象的内存图
  • 2个对象的内存图
  • 数组的内存图

java是一门面向对象语言,并且java中万物皆对象,可以说对象是java代码的基本单元,所以说对于对象的内存分析显得很重要

一个对象的内存图

在创建对象时会执行以下操作:

其中的类的加载是在创建对象之前会判断该类是否加载,如果已经被加载,将不会被加载,类只会被加载一次
具体步骤参考


以上代码的内存图:

对以上内存图的说明

1.对执行流程的分析:

我们的测试类StudentTest由我们的JVM自动加载,StudentTest类的字节码文件(里面细致包含main方法)将会被加载到方法区,然后由我们的JVM调用main方法,我们的程序由此开始

首先我们的main方法进行栈中,然后在创建对象时,Student s 局部变量会进入栈中,执行右边创建对象时,会先进行类的加载检查如果该类没有被加载,才会把它的字节码文件(细致包含String name,int age 变量和study方法)加载到方法区中,然后new关键字会开辟堆内存空间

在开辟空间时,会将方法区中的成员变量复制一份到堆空间中,并将成员方法的地址值拷贝一份到堆空间(为了我们以后调用方法时能找到方法)之后会执行java的默认初始化和显示初始化,然后再执行构造方法的初始化。最后将堆内存中的地址返回给在栈中的局部变量

在栈中会临时储存要调用的方法和局部变量,当该方法被调用完将会出栈,方法中的局部变量也会随之消失

2个对象的内存图


注意:2个对象的类的字节码文件只会被加载一次,在方法区中只有1个该类的字节码文件

2个引用指向同一个对象的情况

  • 有这样一段代码


内存图如下

数组的内存图

数组也是一种引用数据类型,我们可以仿照分析对象的内存图的形式来分析它


对象是通过对象去获取值,而数组是根据索引去获取值

posted @ 2023-02-24 09:18  一往而深,  阅读(36)  评论(0编辑  收藏  举报