java – GC优化:for vs foreach

前端之家收集整理的这篇文章主要介绍了java – GC优化:for vs foreach前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试优化我的一些代码,并且得到了关于fors的一个奇怪的结论.

在我的测试用例中,创建了一个具有主要活动的新项目.该活动初始化500个对象的列表,运行一个显式GC并启动该线程.线程循环函数doCalculations.

this.objects是500 MyObject的列表,以前是MyObject,value是int.功能逻辑没有逻辑,他们只是在做任何事情.差异在于内在的.

FUNCTION1

public void doCalculations()
{
    for(MyObject o : this.objects)
            for(int i=0; i<this.objects.size(); i++)
                if(this.objects.get(i) == o)
                    o.value = this.objects.get(i).value;
}

功能2

public void doCalculations()
{
    for(MyObject o : this.objects)
            for(MyObject o2 : this.objects)
                if(o2 == o)
                    o.value = o2.value;
}

使用功能2 GC在我的nexus上被称为每10秒钟,释放〜1.7MB.

使用功能1 GC永远不会被看到.

这是为什么?

解决方法

一个创建一个迭代器,另一个不是.

GC实际上是您的应用程序的瓶颈吗? (似乎不太可能,包括我自己在内的许多开发者都会考虑可读性的好处超过几微秒的GC.)

也就是说,你的整个循环是一个不起眼的反应.

猜你在找的Java相关文章