考虑这样一种情况,我必须从我的 Java 程序调用 C++ 代码。C++ 代码创建了数千个对象。这些动态对象存储在哪里?我怀疑是在 JVM 堆中,因为本机代码将是与 JVM 相同的进程的一部分。
如果是,Java 垃圾收集器线程的规则是否适用于 C++ 代码的对象?
对于第一个问题,C++ 将使用自己的运行时来分配资源,这与 JVM 无关 - JVM 不知道该内存分配器中的任何活动。
对于第二个问题,Java垃圾收集器不会GC C++分配的内存。您必须确保 Java 包装器启动内存释放。在 java GC 回收对象之前,运行时会调用该finalize()方法。默认的继承自java.lang.Object,基本上什么都不做。您可以覆盖它并将其用作钩子来启动释放手动管理的内存。
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |