google.common的guava依赖的partition分割产生的浅拷贝问题解决方案
- 问题背景
- 解决方案
- Lyric: 说你不爱我
问题背景
使用google.common的guava依赖的partition分割产生的浅拷贝问题,如:
把userList集合分割成每个10000的小集合
List<List> partitions = Lists.partition(userList, 10000);
在老年代中会越来越到,知道产生Full GC
如果直接partitions.get(0).clear() 或者 userList.clear() 都会导致原数据的丢失,因为这是浅拷贝的方式
解决方案
List<List> partitions = Lists.partition(userList, 10000);
每次调用的时候进行深拷贝,使每个集合与原大集合partitions没有关系,这是clear就没有问题了
for (List<User> partition : partitions) {
//进行深拷贝,使每个集合与原大集合partitions没有关系,这是clear就没有问题了
doMethod(new ArrayList<>(partition ));
}
partitions.clear();
userList.clear();
作为程序员第 244 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …