关于=null和clear()问题(Java性能优化)
以ArrayList为例,根据情况来看吧,ArrayList内部维护的是一个数组。
1. list = null
那么你list = null; ** 就是释放这个数组对象,当然里面所引用的对象也就释放了**。
2. list.clear()
如果list.clear(); 看看源代码就知道了,是把list里面对象遍历赋值为null,意思就是释放list里面所有对象。
这样就很清楚了,如果你这个list还需要使用,那么你可以使用clear去释放掉list里面所有的数据,GC在回收的时候就有可能回收掉原list里面的这些数据了。如果你都不需要了,那么你就用=null这样GC就有可能把list以及里面关联的一些数据也都回收了。
3. 咱们来看下clear()源码
clear()
源码解析:
If we take an ArrayList
as an example, the clear()
method does this:
1 | public void clear() { |
Basically, if elements of a List are not referenced anywhere else in the code there is really no need (or at least you do not gain anything) to call clear()
. You also do not need to assign null
to the List because it will be garbage collected as soon as it falls out of scope.
译文:
基本上,如果List中的元素没有被引用到代码中的其他地方,那么确实没有必要(或至少你没有获得任何东西)来调用clear()
。 您也不需要为List指定null
,因为它会在超出范围的情况下被垃圾回收。
关于=null和clear()问题(Java性能优化)
https://wonderomg.github.io/2016/04/19/关于=null和clear()问题(Java性能篇)/