1
我讀過這篇文章和關於如何保持C++對象的答案。Android NDK:保持活着的C++對象
Android NDK, keeping live C++ objects
但我有一些還是不明白。 我知道jlong可以存儲內存地址,但不是jlong存儲只有該C++對象的初始地址? 如果是這樣,Dalvik GC將不知道對象的內存何處結束,這意味着當我們仍然需要時,C++實例可能會被GC破壞。我怎麼能防止這種情況發生?
還是C++實例停留在沒有GC管理的本地堆的情況下,因此該對象會安全地停留在只需要顯式釋放內存函數的內存中?
我見過有人說保持C++實例是不安全的,但如果它不是因爲GC和JVM而不安全,那麼不安全的因素是什麼?或者它是否安全? thx – CropP
在您的Java應用程序中保留C++對象指針是不安全的,因爲本地對象可以被刪除(通過本機代碼本身),同一地址可以被完全不同的對象(可能是不同類型)重用,而Java不會知道這一點。以上不是死刑判決:您應該意識到這種不安全性,並構建一個框架,Java和本機代碼可以跟蹤和處理這些情況。還有其他棘手的情況。 –
如果Java沒有注意到本地堆的更改會發生什麼?或者這些更改不僅影響本機堆?或者這個問題會造成內存不足,因爲GC不知道,所以內存不能清理? – CropP