java基础学习 day29(对象的内存原理)

文章详细阐述了Java中创建对象的步骤,包括加载class文件到元空间,声明和初始化局部及成员变量,以及对象在堆和栈内存中的存储。new关键字在堆内存分配空间,对象的成员方法存储在方法区。当对象不再被引用时,其内存空间可被垃圾回收机制回收。此外,文章还讨论了多个引用指向同一对象的情况及其影响。
摘要由CSDN通过智能技术生成
  1. 创建对象的步骤:
    a. 加载class文件(字节码文件),到元空间(java7之前叫方法区),临时存储成员变量和成员方法。
    b. 声明局部变量,在栈内存中,存储对象的地址值
    c. 在堆内存中为对象开辟一个空间(因为new关键字),存储成员变量,并存储成员方法的地址值
    d. 默认初始化,对成员变量进行赋默认值
    e. 显示初始化,若在类中,声明成员变量的同时进行了赋值,那么会用这个值替换调上一步赋的默认值。
    f. 构造方法初始化,用形参对需要赋值的成员变量进行赋值操作
    g. 将堆内存中的对象的地址值赋值给左边的局部变量

  2. 一个对象的内存图
    在这里插入图片描述

  • new关键字在开辟堆内存时,只会存成员方法在方法区的地址。而当程序执行到s.study();时,会先去堆内存s存储的地址寻找成员方法的地址,根据方法区中的成员方法,把成员方法再加载进栈执行。
  1. 两个对象的内存图
    在这里插入图片描述
  • 第二个对象创建的时候,.class文件就不用再加载一次了。
  • 每当有一个new,就在堆内存中创建一个小空间,个小空间之间互相独立。
  • 当没有对象指向堆内存的空间(存储原对象的数据的空间,但存储原对象地址值的变量消失)时,这个空间也会被回收(重置),即没有对象名指向堆内存的对象空间时,该对象空间会变成垃圾,而变成垃圾的对象空间不能再使用。
  1. 两个引用指向同一个堆内存的内存图
    在这里插入图片描述
  • 当两个对象名存储的是同一个堆内存地址时,任意修改其中一个对象的成员变量,都会导致另一个的成员变量的值的改变,因为他们本质都是一个对象,只是取了两个名字
  • 但当一个对象名更改为null,即消失掉一个对象名后,因为还是有一个对象名存储这个堆内存地址,所以这块地址不会消失,等另一个对象名更改为null时,没有一个对象名存储这个内存地址了,即没有对象指向这个堆内存空间时,这个堆内存空间会被回收(重置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿罗小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值