当我们在java.lang.List 对象中存放较大的内容是,如果不显式的清除 ,将有可能导致内存溢出。
GC操作应该由JVM自行控制,在绝大部分的场景都不建议程序员手动写代码显式进行System.gc()操作。
当 System.gc() 或 Runtime.getRuntime().gc()API被调用时,将触发完整的GC事件。在GC完成之前,整个JVM将冻结(即正在运行的所有服务将被暂停),通常完整的GC需要很长时间才能完成。因此在不合适的时间运行GC,将导致不良的用户体验,甚至是崩溃。
JVM具有复杂的算法,该算法始终在后台运行,进行所有计算以及有关何时触发GC的计算。当您显式调用System.gc()调用时,所有这些计算都将被抛掉。
个人总结较简单的处理方式如下:
List<Integer> list = new ArrayList<>();
try {
for (int i = 0; i < 999999; i++) {
list.add(i);
}
} finally {
// 清空对象
list.clear();
}
System.out.println(list);