wky7716
wky7716
2014-05-13 16:41

java GC 静态List 如果没有引用会被回收吗

已采纳

private static List list = new ArrayList();
执行某个方法进行了这样的操作 list=null; 请问这个没有被引用的list会被GC回收吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • walthahat 千年松鼠728 7年前

    静态变量引用的对象会被回收,但是静态变量本身不会被回收。

    点赞 评论 复制链接分享
  • bylijinnan bylijinnan 7年前

    会的。

    点赞 9 评论 复制链接分享
  • iteye_6889 iteye_6889 7年前

    “这个没有被引用的list会被GC回收吗?”
    --这个表述,换成“被list引用(或持有)的对象,比如Obj,在list置为null后,Obj会被GC回收吗”,或许更准确。

    点赞 评论 复制链接分享
  • iteye_11009 iteye_11009 7年前

    垃圾收算法

    1.引用计数法(Reference Counting Collector)
    2.tracing算法(Tracing Collector)
    3.compacting算法(Compacting Collector)
    4.copying算法(Coping Collector)
    5。generation算法(Generational Collector)
    6.adaptive算法(Adaptive Collector)

    一个新的对象被创建,由于它没有使用,所以该对象迅速地变为不可达,程序编译后,执行命令: java -verbosegc TestGC 后结果为:
      [Full GC 168K->97K(1984K), 0.0253873 secs]
      机器的环境为,Windows 2000 + JDK1.3.1,箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97K=71K的对象容量被回收,括号内的数据1984K为堆内存的总容量,收集所需要的时间是0.0253873秒(这个时间在每次执行的时候会有所不同)。

      需要注意的是,调用System.gc()也仅仅是一个请求(建议)。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。
    

    一旦垃圾回收器准备好释放对象占用的存储空间,首先会去调用finalize()方法进行一些必要的清理工作。只有到下一次再进行垃圾回收动作的时候,才会真正释放这个对象所占用的内存空间。

    http://blog.csdn.net/zsuguangh/article/details/6429592
    看能否对你有用

    点赞 评论 复制链接分享
  • hadeslbf hadeslbf 7年前

    只有一个对象没有人引用它了,那它就是可回收的了,在未来的某个时刻,他就可能会被回收。

    点赞 评论 复制链接分享
  • chainhou chainhou 7年前

    可以启动JAVA应用时增加-XX:+PrintGCDetails这样一个配置,可以观察到什么时候GC执行了,回收了多少内存,和你list里内容大小比对下,应该可以观察的到。

    点赞 评论 复制链接分享

相关推荐