这种形式的内存管理在Java中是否有意义?

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)

我的问题:

  1. 这是多余的吗?
  2. 我弊大于利吗?
  3. 这有什么好处吗?
  4. 为什么?

Nat*_*C-K 9

这是多余的.您没有帮助这些对象被释放,因为垃圾收集已经确定它们无法访问.你不能让它们比现在更难以到达.所以,你会浪费一些处理时间来完成任何事情.

但是,主要的问题是,您会混淆其他开发人员,他们会想知道为什么要清除该阵列.他们可能会浪费时间试图找出你为什么这么做,如果有一些他们最初没有看到的隐藏原因.

C++开发人员倾向于使用Java代码的类似问题是制作终结器 ; 在Java中,你几乎从不想这样做,因为终结器为垃圾收集增加了额外的成本,并且它们不是一种可靠的资源释放方式,因为它们可能不会长时间被调用,或者永远不会被调用.

  • 这是一篇简短的文章,解释了Java的GC类型的基础知识,它可能有助于为您澄清一些内容:http://www.brpreiss.com/books/opus5/html/page424.html (2认同)