java - 动态内存处理 Java 与 C++

标签 java c++ memory-management heap-memory

我是一名 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/

相关文章:

java - android fragment 新手 - 寻找一些答案

Java多线程: how does thread creation with Runnable interface work?

c++ - 调用成员函数时出错

c++ - 免费(): double free detected in tcache 2

c++ - 重置场景时 OpenSceneGraph 内存使用情况

java - 自定义 servlet 过滤器谷歌端点

java - Stream.parallel() 是否使用新线程?

c++ - QQuickFramebufferObject重绘只显示清晰颜色

c++ - std::atomic 的默认值是多少?

C++ STL 内存管理 : Stack or Heap?