首页 新闻 搜索 专区 学院

频繁full gc的问题

0
悬赏园豆:80 [已解决问题] 解决于 2020-09-09 17:34

附上代码:
if (CollectionUtils.isNotEmpty(applyList)) {
//1.全量更新,超过1000个,考虑多线程处理;
if (applyList.size() > SPLIT_MAX_NUM) {//SPLIT_MAX_NUM为1000
try {
for (int i = 0; i < applyList.size(); i = i + SPLIT_MAX_NUM) {
List<> subapplyList = applyList.stream().skip(i).limit(SPLIT_MAX_NUM)
.collect(Collectors.toList());
threadPoolExecutor.execute(() -> {
for (类型 list : subapplyList) {
//做更新操作
}
});
}
} catch (Exception e) {
log.error("异常", e);
}
return;
}
//2.处理量小于最大值,直接做更新操作
for (类型 list : applyList) {
直接做更新操作
}

}
处理数据量大概在6万左右,报了频繁full gc的警告
想知道如果SPLIT_MAX_NUM的值设的大一点或者设的小一点会不会减少full gc
还有第二个问题,如果我用jvm分析工具,是堆内存使用的越小越好,还是说也要考虑老年代的使用情况

四斤半的主页 四斤半 | 初学一级 | 园豆:38
提问于:2020-07-14 11:48
< >
分享
最佳答案
0

那个线程池你用的是什么类型的线程池?是不限任务队列大小的还是不限线程数量的?如果频繁创建线程对cpu和内存的压力都会很大的

收获园豆:80
我是满意吖 | 菜鸟二级 |园豆:380 | 2020-07-18 09:15
其他回答(2)
0

用的哪个GC?配置参数是什么?你的applylist有多大的内存占用?

Timetombs | 园豆:3754 (老鸟四级) | 2020-07-15 08:10
0

把SPLIT_MAX_NUM调成500了,占用的内存会小一点

四斤半 | 园豆:38 (初学一级) | 2020-09-09 17:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册