我是一名 C++ 程序员,目前正在尝试使用 Java。在 C++ 上工作,我习惯于跟踪动态内存分配并使用 RAII 等各种技术来避免内存泄漏。正如我们所知,Java 提供了一个垃圾收集器 (GC) 来处理内存泄漏。因此,在使用 Java 进行编程时,应该抛开堆内存的所有有益健康的担忧,将其留给 GC 来处理内存泄漏,或者应该有一种类似于没有 GC 的编程语言的方法,尝试处理您分配的内存,让 GC 处理您可能错过的内存。应该采取什么方法?两者的缺点是什么?
最佳答案
我不确定您所说的在 GC 存在的情况下尝试处理您分配的内存是什么意思,但我会尝试读心术。
基本上,您不应该“担心”您的内存被收集。如果您不再引用对象,它们将被拾取。如果您创建了一种情况,其中对象被程序的其余部分引用(例如:注册监听器并且从不取消注册它们,例如:实现一个类似 vector 的集合,但不会将项目设置为 null
当删除末尾的项目时)。
但是,如果您具有深厚的 RAII 背景,您会失望地发现 Java 中没有直接的等效项。 GC 是处理内存的一流工具,但无法保证何时(甚至是否)调用终结器。这意味着应用于内存的一流处理不应用于任何其他资源,例如:窗口、数据库连接、套接字、文件、同步原语等。
关于java - 动态内存处理 Java 与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4054969/