java 程序内存分析,Java 对象内存分析

本文深入解析Java中的堆内存和栈内存,通过类与对象的关系阐述它们的区别。堆内存存储对象的具体信息,如对象的属性,而栈内存保存对象的位置,即内存引用。通过实例说明如何创建和引用对象,以及内存垃圾回收的工作原理。
摘要由CSDN通过智能技术生成

一直对堆内存和栈内存搞不明白,最近看了一个视频,有了新的了解,在这里给大家分享一下

对象内存与引用

对象

好多刚入门学习 Java 的人总是搞不清楚类和对象的关系,在这里简要说明一些。

类:顾名思义,一类东西,比如女孩、男孩、人、狗狗,都是类(class),莹莹、小明、团团,则是对象(object)。

也可以理解为对象是类的具体化(实例),类是泛指,对象是有具体指向。

class Dog 中,Dog 是类

public class Dog {

public String color;

public String name;

public Integer age;

}

tuan = new Dog 中,tuan 是对象,是 Dog 类的实例,每个狗狗的名字,颜色、年龄,都不一样。

tuan = new Dog();

tuan->color = "white";

tuan->name = "tuan";

tuan->age = 3;

这样我们就定义了一个完整的对象 tuan,可以看到,类只是定义了狗应该有的属性,名字,年龄,颜色,但是并没有说明是什么样的狗,对象则指向具体是哪只狗狗,狗狗名字是什么,年龄多少,颜色是什么。

内存

可以简单的理解一个电影院,有多少位置。比如有100个位置,则内存就是100。

堆内存:保存对象的具体信息,比如:第三排,第三号的座位 C,则 C 的具体信息(座椅大小、材质、柔软度、颜色,能否调节),就保存在堆内存中

栈内存:保存对象的位置,比如:第三排,第三号(位置为 33 号),则 33 号存储在栈内存中

0c314ba2fbead8455b58cbbac3a7219a.png

关系如上图,一个座位号对应一个座位。eg: public class Site{}, Site 是位置信息,c = new Site()。当我们 new 一个对象时,就会在堆内存中开辟一个空间,存储对象信息。比如,在电影院里3排3座放一个椅子,这个椅子叫做 c,他的位置是3排3号(电影票,在取票箱中),我们可以根据电影票找到对应的座椅。座椅是有属性的,c->size = 23,则对应的存储信息如下图:

2f1d004a64dd3b8e78293cc613a7bc1c.png

引用

可以简单暴力的理解为引用对象的地址,即栈内存中的地址,比如:

c = new Site();

c->size = 23;

// c1 引用 c 的地址

c1 = c;

// return c1->size; 输出: 23

c1->size = 24;

//return c->size; 输出: 24

// 由于 c 和 c1 指向的都是同一个对象,因此改动之后都会变化

8c98be6a869b206664d0cc07d402bade.png

内存垃圾

c = new Site();

d = new Site();

d = c; // d 和 c 指向一个对象

垃圾内存不能再被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉

如下图:

ddf3794b64d53618636c955a69813ff0.png

本文参考视频: Java 面向对象编程

程序员灯塔

转载请注明原文链接:Java 对象内存分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值