【发布时间】:2010-10-29 18:56:13
【问题描述】:
我是一名 C++ 程序员,目前正在尝试使用 Java。在 C++ 上工作,我习惯于跟踪动态内存分配并采用各种技术(如 RAII)来避免内存泄漏。正如我们所知,Java 提供了一个垃圾收集器(GC)来处理内存泄漏。因此,在 Java 中编程时,应该放下堆内存的所有有害担忧,让 GC 处理内存泄漏还是应该一个有一种类似于在没有 GC 的情况下编程语言的方法,尝试处理您分配的内存,让 GC 处理您可能错过的内存。应该采取什么方法?两者的缺点是什么?
【问题讨论】:
-
警告!检测到重大误解! 垃圾收集器不“处理内存泄漏”。 Java 容易受到其自身的内存泄漏子集的影响。垃圾收集器负责处理 未引用 对象。您仍然可以通过维护引用来泄漏内存。
-
@Mark:所以在 Java 中,因为没有删除(来自线程中的答案之一),所以应该更关心正在维护的引用,因为根本没有删除来清除任何堆?
-
你绝对应该关心你的引用的生命周期(注意:这很少意味着你应该明确地将某些东西设置为空)。我不确定是否应该比 C++ 更关注 。无论哪种方式,维护对未使用对象的引用都是一个错误。在 Java 中,它表现为内存泄漏。在 C++ 中,如果你不删除它,这将是内存泄漏,如果你这样做,它可能会导致分段错误,或者如果你试图跟随指针指向一个已经被取消分配的东西,那么它可能会导致非常难以诊断错误。跨度>
标签: java c++ memory-management heap-memory