加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – GC优化:for vs foreach

发布时间:2020-12-14 05:23:20 所属栏目:Java 来源:网络整理
导读:我一直在尝试优化我的一些代码,并且得到了关于fors的一个奇怪的结论. 在我的测试用例中,创建了一个具有主要活动的新项目.该活动初始化500个对象的列表,运行一个显式GC并启动该线程.线程循环函数doCalculations. this.objects是500 MyObject的列表,以前是MyOb
我一直在尝试优化我的一些代码,并且得到了关于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.)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读