A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王赟 中级黑马   /  2013-4-20 22:43  /  1168 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么样的对象会被CG认为是垃圾呢?

2 个回复

倒序浏览
通常情况下如果发生以下两种情况时系统会以为这些对象是垃圾对象需要销毁。 一是将一个NULL值赋值给对象。如用户先建立了一个对象str1。对象用完了之后再利用赋值语句将NULL值赋值给这个对象str1即使用 str1=NULL的方式将NULL值赋值给这个对象。此时这个对象与内存中对象的存储地址之间就失往了联系。此时内存中的对象就似乎成为了一个无主的对象就会被垃圾回收器销毁。不过这也有例外。如现在同一个对象有两个名字分别为str1与str2。此时若只是将NULL值赋值给str1那么内存的这个对象仍然有一个主人即str2。此时这个对象还暂时不会被垃圾回收器回收。除非在代码中讲这个对象所关联的所有对象名字都赋值为NULL。此时这个对象才变为无主的对象才会被垃圾回收器回收。在Java中定义自己的工具库 二是对象其超出了作用范围这个这个对象就被以为是垃圾对象被被垃圾回收器回收并开释内存。实在对象跟变量一样其也有作用域。当超过这个作用域的话跟变量一样这个对象也就无效了其他地方不能够再引用这个对象。此时这个对象就是名存实亡了。为此垃圾回收器也把这种超过作用范围的对象当作垃圾对象来处理。所以说假如程序员要让对象中的某些成员变量或者成员方法一直有效的话就需要采用static关键字让其在变量销毁时仍然有效或则仍然可以调用这些成员变量与成员方法。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
GC的原理还不太清理,但它会在适当的时机检查(太频繁不行,效率会下降)堆中的数据是否不被使用了,如果再也没有人使用这块内存,GC就会释放它,
{
Button btn=new Button();
..............
}
这时,如果没有人再使用new Button()的那片内存btn指向的内存被释放
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马