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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-6 14:46 编辑

大家都只知道,内存的管理由Java解释器分配内存而且Java是以堆和栈的形式分配内存且Java解释器为其在栈中开辟内存,但Java解释器为其在堆中分配一块内存是用来存放根据引用数据类型所产生的对象,同时也会在栈中声明一个引用变量来指向这个对象,该引用变量的值是该对象在堆中的首地址值,我想知道的是Java内存的垃圾回收是怎么一回事,垃圾是怎么产生和回收的!我不知道我说明白了没有,希望看明白的高手回答一下,非常感谢!


评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

1 个回复

倒序浏览
     根据你讲述内容的前半部分,我相信你是很容易理解垃圾是怎么产生的。既然引用变量指向了堆内存中的实际对象,那么,你现在想想,如果我现在使引用变量Person p=null,会是什么结果呢?之前除了p之外,没有对象引用过这个对象。这下垃圾就有了。由于没有引用变量知道这个实际对象的地址,它就不受程序的控制了。JVM会定时搜索这些不再被引用的对象,释放它们的内容。当然,如果你要问我它搜索的算法是怎样的,就有点为难我了,这是纯数学问题,有兴趣可以自己深究。回收的原理我想就没有必要讲得太详细了,任何数据最终都会反映为0,1,恢复电气信号为最初状态就行了,即数据被擦除。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马