memory gc == and equals

本文详细介绍了Java内存区域划分,包括栈、堆、静态存储和常量存储,并解释了对象在不同区域的分配原则。此外,还探讨了Java中==与equals的区别,以及GC如何通过两种不同方式识别并清理堆内存中的无用对象。

java ram(randam access memory): 分成:stack,heap,static storage, constants storage.

stack:对像的删除存取比较快,存放的是已知的对像(类型,生命周期), 存放 基本数据类型,对象的引用

heap:在里面创建对像(即用new关键字来产生对象),存放用new关键字生成的对象

static stroage: 静态变量

constants storage: 常量

eg: String s = new String();

该语句产生两个对象,

一个是对象s的应用(代表string 对像的引用,位于stack 内)

一个是真实的s这个string对象(位于heap内)

 

------------------------------------------------------

== : 比较的是对像的引用。 

equals :比较的是对像值,但默认的是使用对象的hashcode 来比较,hashcode 默认的既是对象的引用地址,所以在不覆写equals 和hashcode的程序里面,equals 便会默认的比较对象的引用。

-------------------

GC:

java的GC回收在heap内的没有引用到的垃圾对象,分两步:

  1。找到可回收的垃圾 

           A: reference counter : 即对象每次增加,减少引用都会有个计数器来保存该引用,引用数目为0的为垃圾对象

           B: Tracing Collector :从stack上开始寻找对象,有引用到的便是非垃圾对象,引用对象的子引用继续在stack上寻找,以此类推。

  2。回收垃圾

          A:stop and copy: 暂停(stop)正在执行的程序, 在两个heap之间来copy有用对象,废弃垃圾对象,同时整理heap使其紧凑相连,

             copy结束后的heap便是紧凑没有垃圾对象的了。

          B:mark and sweap: 对应tracing Collector ,在tracing过程中已经做了标识(mark)从而可以sweap垃圾对像。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值