java.lang.OutOfMemoryError: GC overhead limit exceeded

import java.util.*;public class GarbageCollector {

public static void main(String... args) {

    System.out.printf("Testing...%n");
    List list = new ArrayList();
    for (int outer = 0; outer < 10000; outer++) {

        // list = new ArrayList(10000); // BAD
        // list = new ArrayList(); // 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次
当然,这不是最好的测试,也不是最好的设计,但是当您面临这样的情况时,除了实现这样的循环之外,或者在处理行为不好的现有代码时,选择重用对象而不是创建新的对象可以减少垃圾收集器遇到阻碍的次数.

解决方案:
https://www.jb51.net/article/102191.htm

你可能感兴趣的:(java.lang.OutOfMemoryError: GC overhead limit exceeded)