了很多努力,我似乎无法克服得到一个避免“GC开销超限”错误
GC开销限制的问题后,在我的Java程序超过
错误。
它的发生是含有大量字符串操作,对象名单,数量和访问DB一个大方法中。 我曾尝试以下:
-
使用每个的ArrayList后
- ,我已经加入:列表=新的ArrayList <>();列表= NULL;
- 对于琴弦,而不是具有例如。 50次追加(STR + =“....”)我尝试有一个附加每个DB访问我关闭语句和结果集后总文本
- 。
此方法是从主叫这样的:
for(int i=0; i<L; i++) {
cns = new Console(i);
cns.processData();//this is the method
cns=null;
}
当此循环被执行1次或2次,一切正常。对于L> = 3,我几乎肯定会得到垃圾回收器错误。
不应该在每次执行该方法后都有一个cns = null的事实,强制执行GC并将所有内容从前一次执行中解放出来?
是否也应该将其设置为null之前删除对象的所有私有属性?也许把一个Thread.sleep()可以在每个循环后强制GC?
也许你第三次运行占用太多的内存。我会建议将你的大方法分成更小的方法。手动调用GC和Thread.spleep是一种错误的方法。 – Admit