import java.util.*;public class GarbageCollector {
public static void main(String... args) {
System.out.printf("Testing...%n");
List<Double> list = new ArrayList<Double>();
for (int outer = 0; outer < 10000; outer++) {
// list = new ArrayList<Double>(10000); // BAD
// list = new ArrayList<Double>(); // WORSE
list.clear(); // BETTER
for (int inner = 0; inner < 10000; inner++) {
list.add(Math.random());
}
if (outer % 1000 == 0) {
System.out.printf("Outer loop at %d%n", outer);
}
}
System.out.printf("Done.%n");
}}
在Windows 7 32位上使用java 1.6.0_24-b07.
Java-Xloggc:gc.log GarbageCollection
然后查看gc.log
用坏方法触发444次
用更差的方法触发666次
用更好的方法触发354次
当然,这不是最好的测试,也不是最好的设计,但是当您面临这样的情况时,除了实现这样的循环之外,或者在处理行为不好的现有代码时,选择重用对象而不是创建新的对象可以减少垃圾收集器遇到阻碍的次数.