2011-07-22 59 views
0

我正在使用JNA將C DLL庫轉包爲Java。該庫提供了一個C#包裝器。在C#包裝的構造,將創建一個對象,並且該對象的存儲器被等效代碼到Java中的GCHandle.Alloc()?

this.m_object = _CreateObject(); 
this.m_objectGCH = GCHandle.Alloc(this.m_object, GCHandleType.Pinned); 

m_object固定指向所創建的對象,和對象的存儲器中的整數由GCHandle.Alloc(釘扎)。我可以創建一個對象並通過JNA獲取指向該對象的指針。但是,我不知道用Java來固定對象內存。

+0

java中沒有直接的等價物。如果您提供更多的上下文(即,您如何/爲什麼要嘗試使用JNA對象),那麼我們可能會提出解決方法。 – 2011-07-22 06:59:04

回答

0

Java的GC沒有意識到爲您的對象分配了本地內存。如果您有責任在將來某處刪除內存,則必須通過調用對象分配建議的任何「空閒」方法在Java代碼中明確執行此操作。

如果您需要確保Java不會GC給定Java對象,那麼您需要確保有對它的引用,直到您不再需要它爲止(最簡單的方法是將它存儲在一個靜態(類)變量)。