我已经阅读了这篇文章以及如何保持C ++对象存活的答案。
Android NDK, keeping live C++ objects
但是我还有一些东西还是不明白。 我知道jlong可以存储一个内存地址,但不是jlong存储只有那个C ++对象的初始地址吗? 如果是这样,Dalvik GC将不知道对象的内存在哪里结束,这意味着当我们仍然需要它时,GC可能会破坏C ++实例。我怎么能防止这种情况发生?
或者C ++实例是否在没有GC管理的情况下保留在本机堆中,因此该对象可以安全地保留在内存中,只需要显式释放内存函数?
答案 0 :(得分:4)
第二个是正确的。 C ++对象是在本机堆中创建的,不受JVM控制。因此,垃圾收集器永远不能访问这些对象。即使您使用某种机制来保存Java中的C ++指针,它们也只是Java的未知 jlong ,而Dalvik仍然不知道如何销毁或操纵这些对象。