private static List list = new ArrayList();
执行某个方法进行了这样的操作 list=null; 请问这个没有被引用的list会被GC回收吗?
静态变量引用的对象会被回收,但是静态变量本身不会被回收。
会的。
可以启动JAVA应用时增加-XX:+PrintGCDetails这样一个配置,可以观察到什么时候GC执行了,回收了多少内存,和你list里内容大小比对下,应该可以观察的到。
只有一个对象没有人引用它了,那它就是可回收的了,在未来的某个时刻,他就可能会被回收。
垃圾收算法
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
看能否对你有用
“这个没有被引用的list会被GC回收吗?”
--这个表述,换成“被list引用(或持有)的对象,比如Obj,在list置为null后,Obj会被GC回收吗”,或许更准确。