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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 牛杨 于 2012-8-4 16:42 编辑

                                 “问题已经解决”
困惑好久的问题了:java中 有引用指向 就是很久都没有使用过的 对象 算不算垃圾?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 加油!

查看全部评分

10 个回复

倒序浏览
不用好久不使用,只要没有引用了就是垃圾。。。
有引用再久都不是垃圾。。。
回复 使用道具 举报
你其实是需要了解java的垃圾回收器:GC
我简单总结一下
  对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
  注意:是不可到达的对象,就是那些null的对象

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
牛杨 + 1 赞一个!
杨志 + 1

查看全部评分

回复 使用道具 举报
侯宪博 发表于 2012-8-4 12:07
不用好久不使用,只要没有引用了就是垃圾。。。
有引用再久都不是垃圾。。。
...

我在百度上看到的答案五花八门 刚才又看了看 jvm的东西 ,突然感觉这个问题是不是和jvm的版本、类型有关?
回复 使用道具 举报
本帖最后由 瞿乐 于 2012-8-4 12:17 编辑

不算。 垃圾回收具有以下特点:
只有当对象不再被程序中的任何引用变量引用时,它的内存才可能被回收。
程序无法迫使垃圾回收器立即执行垃圾回收操作。
当垃圾回收器将要回收无用对象的内存时,先调用该对象的finalize()方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的内存。
只要还有引用不算是垃圾的。
现在大多数jvm采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。
我百度的 垃圾回收机制。 看一看,楼主应该会明白的 {:soso_e100:}

评分

参与人数 2技术分 +1 黑马币 +4 收起 理由
牛杨 + 4 很给力!
杨志 + 1

查看全部评分

回复 使用道具 举报
对于楼上的、说明有所误导、Java所做的 "垃圾回收装置"  不用 system.gc 一些人认为是这个  、 但是不是的、Java本身就有垃圾回收装置、不用手动调用 、 C++不同、还有自己手动回收垃圾装置、以便释放内存、Java 是 在你的 内存 不够的情况 下 自动的回收一些 没有必要的代码、也即是垃圾、 如有不了解的 你自己去看 “韩顺平的 深圳那边讲的课”  希望对楼主有所帮助
回复 使用道具 举报
黑马-张化 发表于 2012-8-4 12:16
对于楼上的、说明有所误导、Java所做的 "垃圾回收装置"  不用 system.gc 一些人认为是这个  、 但是不是的 ...

是视频么,给个关于这一节的地址吧 我去看看。
回复 使用道具 举报
本帖最后由 侯宪博 于 2012-8-4 12:42 编辑
牛杨 发表于 2012-8-4 12:14
我在百度上看到的答案五花八门 刚才又看了看 jvm的东西 ,突然感觉这个问题是不是和jvm的版本、类型有关 ...

这个不清楚。。。
回复 使用道具 举报
在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
牛杨 + 1 赞一个!
杨志 + 1

查看全部评分

回复 使用道具 举报
瞿乐 发表于 2012-8-4 12:14
不算。 垃圾回收具有以下特点:
只有当对象不再被程序中的任何引用变量引用时,它的内存才可能被回收。
程 ...

根据大家对我的解答 我知道了 这个没有引用的对象不论放置多久都不算是垃圾。
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马