项目中使用Lists.Partition批量处理数据,但是最近内存一直OutOffMemory,GC无法回收。后来我们对使用过的集合手动clear,没有测试直接就上线了。尴尬的是内存回收了,但是跑出来的数据出问题了。最后自己单元测试发现是List<List<TreasureIntegrationVo>> resultPartition = Lists.partition(list, 500)之后再对list进行clear操作,resultPartition也会被清空。回来百度才发现它最终会调用 list.subList。subList执行结果是获取ArrayList的一部分,返回的是ArrayList的部分视图。对子集合的操作会反映到原集合, 对原集合的操作也会影响子集合。
参考:
https://blog.csdn.net/huangwenyi1010/article/details/78409489/
https://www.cnblogs.com/lanweijava/p/11900442.html
https://blog.csdn.net/PrimeYun/article/details/100714846