ate*_*iob 5 java garbage-collection memory-leaks memory-management
在我的应用程序的生命周期中,我必须重新创建一个ArrayList,其中包含其他对象的ArrayLists(从存储中读取它们).ArrayList总是被分配给一个类中的同一个数据成员,实际上是让旧的ArrayList-of-ArrayLists悬空(不可引用或不可访问).
我的理解是,与C++不同,这不会导致内存泄漏,因为系统知道对象何时变得不可引用并在其认为合适时释放内存.
尽管如此,旧的习惯很难克服,我几乎本能地通过在重新创建ArrayList-of-ArrayLists之前自己做一些清理来"帮助"系统:
for (InnerArray aList : outerArray)
aList.clear();
outerArray.clear();
Run Code Online (Sandbox Code Playgroud)
我的问题:
这是多余的.您没有帮助这些对象被释放,因为垃圾收集已经确定它们无法访问.你不能让它们比现在更难以到达.所以,你会浪费一些处理时间来完成任何事情.
但是,主要的问题是,您会混淆其他开发人员,他们会想知道为什么要清除该阵列.他们可能会浪费时间试图找出你为什么这么做,如果有一些他们最初没有看到的隐藏原因.
C++开发人员倾向于使用Java代码的类似问题是制作终结器 ; 在Java中,你几乎从不想这样做,因为终结器为垃圾收集增加了额外的成本,并且它们不是一种可靠的资源释放方式,因为它们可能不会长时间被调用,或者永远不会被调用.