小编Tha*_*lur的帖子

内部类与静态嵌套类的GC性能受到影响

我只是遇到了一个奇怪的效果,在跟踪它时,我注意到收集内部和静态嵌套类似乎有很大的性能差异.考虑以下代码片段:

public class Test {
    private class Pointer {
        long data;
        Pointer next;
    }
    private Pointer first;

    public static void main(String[] args) {
        Test t = null;
        for (int i = 0; i < 500; i++) {
            t = new Test();
            for (int j = 0; j < 1000000; j++) {
                Pointer p = t.new Pointer();
                p.data = i*j;
                p.next = t.first;
                t.first = p;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么代码所做的就是使用内部类创建一个链表.该过程重复500次(用于测试目的),丢弃上次运行中使用的对象(受GC影响).

在内存限制严格(例如100 MB)下运行时,此代码在我的计算机上执行大约需要20分钟.现在,通过简单地用静态嵌套类替换内部类,我可以将运行时减少到不到6分钟.以下是更改:

    private static class Pointer {
Run Code Online (Sandbox Code Playgroud)

                Pointer p …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection nested-class

23
推荐指数
2
解决办法
5737
查看次数

标签 统计

garbage-collection ×1

java ×1

nested-class ×1