Android NDK:保持活着的C 对象



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

Android NDK,保持活的C 对象

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

或C 实例在没有GC管理的情况下停留在本机堆中,因此该对象将安全留在内存中,只需要显式释放内存功能?

第二个是正确的。C 对象是在本机堆中创建的,该物体不受JVM控制。因此,垃圾收集器永远无法访问这些对象。即使您使用某种机制将C 指针保留在Java中,它们也是Java的未知 Jlong ,Dalvik仍然不知道如何破坏或以其他方式操纵这些对象。

>

最新更新