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.) 也就是说,你的整个循环是一个不起眼的反应. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |