Android NDK:保持活着的C ++对象

时间:2014-01-30 07:50:26

标签: android c++ c android-ndk garbage-collection

我已经阅读了这篇文章以及如何保持C ++对象存活的答案。

Android NDK, keeping live C++ objects

但是我还有一些东西还是不明白。 我知道jlong​​可以存储一个内存地址,但不是jlong​​存储只有那个C ++对象的初始地址吗? 如果是这样,Dalvik GC将不知道对象的内存在哪里结束,这意味着当我们仍然需要它时,GC可能会破坏C ++实例。我怎么能防止这种情况发生?

或者C ++实例是否在没有GC管理的情况下保留在本机堆中,因此该对象可以安全地保留在内存中,只需要显式释放内存函数?

1 个答案:

答案 0 :(得分:4)

第二个是正确的。 C ++对象是在本机堆中创建的,不受JVM控制。因此,垃圾收集器永远不能访问这些对象。即使您使用某种机制来保存Java中的C ++指针,它们也只是Java的未知 jlong​​ ,而Dalvik仍然不知道如何销毁或操纵这些对象。