ggp*_*puz 9 java android garbage-collection memory-management
我一直在努力优化我的一些代码,并且我得到了一个关于fors的奇怪结论.
在我的测试用例中,我创建了一个主要活动的新项目.该活动初始化一个包含500个对象的List,运行显式GC并启动该线程.该线程循环函数doCalculations.
this.objects是500 MyObject的列表,以前是MyObject,值是int.函数逻辑没有逻辑,它们就是那里的东西.区别在于内在.
功能1
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;
}
Run Code Online (Sandbox Code Playgroud)
功能2
public void doCalculations()
{
for(MyObject o : this.objects)
for(MyObject o2 : this.objects)
if(o2 == o)
o.value = o2.value;
}
Run Code Online (Sandbox Code Playgroud)
使用功能2在我的nexus s上每隔~10秒调用一次GC,释放~1.7MB.
功能1 GC永远不会被看到.
这是为什么?
一个创建迭代器,另一个不创建迭代器.
GC实际上是您应用程序的瓶颈吗?(似乎不太可能.包括我自己在内的许多开发人员会认为可读性好处超过了几微秒的GC.)
也就是说,无论如何,你的整个循环都是无操作的.
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |