黑马程序员技术交流社区
标题: 关于java怎么知道一个对象是不是垃圾的问题 [打印本页]
作者: 牛杨 时间: 2012-8-4 12:05
标题: 关于java怎么知道一个对象是不是垃圾的问题
本帖最后由 牛杨 于 2012-8-4 16:42 编辑
“问题已经解决”
困惑好久的问题了:java中 有引用指向 就是很久都没有使用过的 对象 算不算垃圾?
作者: 侯宪博 时间: 2012-8-4 12:07
不用好久不使用,只要没有引用了就是垃圾。。。
有引用再久都不是垃圾。。。
作者: 林康春 时间: 2012-8-4 12:11
你其实是需要了解java的垃圾回收器:GC
我简单总结一下
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
注意:是不可到达的对象,就是那些null的对象
作者: 牛杨 时间: 2012-8-4 12:14
侯宪博 发表于 2012-8-4 12:07
不用好久不使用,只要没有引用了就是垃圾。。。
有引用再久都不是垃圾。。。
...
我在百度上看到的答案五花八门 刚才又看了看 jvm的东西 ,突然感觉这个问题是不是和jvm的版本、类型有关?
作者: 瞿乐 时间: 2012-8-4 12:14
本帖最后由 瞿乐 于 2012-8-4 12:17 编辑
不算。 垃圾回收具有以下特点:
只有当对象不再被程序中的任何引用变量引用时,它的内存才可能被回收。
程序无法迫使垃圾回收器立即执行垃圾回收操作。
当垃圾回收器将要回收无用对象的内存时,先调用该对象的finalize()方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的内存。
只要还有引用不算是垃圾的。
现在大多数jvm采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。
我百度的 垃圾回收机制。 看一看,楼主应该会明白的 {:soso_e100:}
作者: 黑马-张化 时间: 2012-8-4 12:16
对于楼上的、说明有所误导、Java所做的 "垃圾回收装置" 不用 system.gc 一些人认为是这个 、 但是不是的、Java本身就有垃圾回收装置、不用手动调用 、 C++不同、还有自己手动回收垃圾装置、以便释放内存、Java 是 在你的 内存 不够的情况 下 自动的回收一些 没有必要的代码、也即是垃圾、 如有不了解的 你自己去看 “韩顺平的 深圳那边讲的课” 希望对楼主有所帮助
作者: 牛杨 时间: 2012-8-4 12:23
黑马-张化 发表于 2012-8-4 12:16
对于楼上的、说明有所误导、Java所做的 "垃圾回收装置" 不用 system.gc 一些人认为是这个 、 但是不是的 ...
是视频么,给个关于这一节的地址吧 我去看看。
作者: 侯宪博 时间: 2012-8-4 12:31
本帖最后由 侯宪博 于 2012-8-4 12:42 编辑
牛杨 发表于 2012-8-4 12:14
我在百度上看到的答案五花八门 刚才又看了看 jvm的东西 ,突然感觉这个问题是不是和jvm的版本、类型有关 ...
这个不清楚。。。
作者: 官文昌 时间: 2012-8-4 12:32
在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。
作者: 牛杨 时间: 2012-8-4 15:07
瞿乐 发表于 2012-8-4 12:14
不算。 垃圾回收具有以下特点:
只有当对象不再被程序中的任何引用变量引用时,它的内存才可能被回收。
程 ...
根据大家对我的解答 我知道了 这个没有引用的对象不论放置多久都不算是垃圾。
作者: 牛杨 时间: 2012-8-4 15:55
问题已经解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |