2009-05-06 63 views
4

考慮一個我必須從我的Java程序調用C++代碼的情況。 C++代碼創建了數千個對象。這些動態對象存儲在哪裏?我懷疑在JVM堆中,因爲本地代碼將成爲與JVM相同的進程的一部分。JVM如何處理原生代碼

如果是,請執行Java垃圾回收器線程的規則適用於C++代碼的對象?

回答

4

對於第一個問題,C++將使用與JVM無關的自己的運行時分配資源 - JVM不知道此內存分配器中的任何活動。

對於第二個問題,Java垃圾回收器不會對由C++分配的內存進行GC分析。你將不得不確保你的Java包裝器啓動內存釋放。在java對象被GC GC調用之前,運行時調用finalize()方法。默認的是從java.lang.Object繼承而來,基本上什麼都不做。您可以覆蓋此內容並將其用作掛鉤以啓動取消分配手動管理的內存。

+1

@Geek - 是的。它是同一過程的一部分,因此C++中的崩潰會導致JVM失效 – 2009-05-06 09:53:32