我想问下,如果把对ArrayList的用iterator遍历改为for(int i=0;i <size; i ++),在量大的情况下,性能能有提升吗?
现在情况是这样的:
最近在优化cpu,发现在30秒左右的时候创建了150w个左右的iterator对象,
然后gc掉,
这是因为有很多对象的update里面会对自己持有的ArrayList进行迭代(这个操作目前看是不可避免的,暂时没有考虑减少操作次数),
都是用的iterator,方法完成后会造成很多iterator在内存里面等待被回收
看了下ArrayList的源码,iterator()方法都是直接new了一个对象出来,
都知道在Java里面new是比较耗资源的一种操作
那么,我考虑把iterator的迭代访问改为for循环访问,
可以避免创建这么多对象,但是for的话会不会比iterator迭代的效率低,
造成得不偿失?或者能考虑的方案是自己写一个ArrayList然后做一个iterator对象池?
这样做很复杂而且会额外造成很多开销,对象池的维护什么的另外我想请问一下30秒左右执行一次非Full GC这算正常吗?
现在情况是这样的:
最近在优化cpu,发现在30秒左右的时候创建了150w个左右的iterator对象,
然后gc掉,
这是因为有很多对象的update里面会对自己持有的ArrayList进行迭代(这个操作目前看是不可避免的,暂时没有考虑减少操作次数),
都是用的iterator,方法完成后会造成很多iterator在内存里面等待被回收
看了下ArrayList的源码,iterator()方法都是直接new了一个对象出来,
都知道在Java里面new是比较耗资源的一种操作
那么,我考虑把iterator的迭代访问改为for循环访问,
可以避免创建这么多对象,但是for的话会不会比iterator迭代的效率低,
造成得不偿失?或者能考虑的方案是自己写一个ArrayList然后做一个iterator对象池?
这样做很复杂而且会额外造成很多开销,对象池的维护什么的另外我想请问一下30秒左右执行一次非Full GC这算正常吗?
解决方案 »
- EJB3-CDI-Spring的关系?
- 求一组java的散列函数
- tomcat整合red5 1.0版本报错
- 在jsp页面中,右下角缓缓上升出来的提醒框,是如果实现的?
- iText pdf 打印问题!!!
- 需要写50个页面的增删改查,针对50个表都是单表操作,怎样减少工作量用jsp,servlet来做
- JBOSS中部署静态配置文件问题
- 线程问题~~~~~高手们看看啊
- 关于ajax按需取数据的问题
- narrow出错
- CKeditor在SSH中的应用问题,求大师指点啊。。。
- 怎么把表格每一行的按钮的值分别传到要处理的jsp页面<input type="submit" name=index value="加锁">
谢谢你们的建议..但是需要在循环中删除元素,foreach做不到这点吧,
可以考虑的方案是把要删除的元素放在另外一个集合中,foreach完了再来统一删除
这又会增加额外的开销。。
foreach很悲剧的是..其实就是iterator..可以把class反编译过来看看,跟用iterator木有区别..
明天开始优化改成for遍历,结贴,谢谢各位!