V
Hi,
ich habe auf JNI Basis eine Anwendung entwickelt, mit der ich aus C++ heraus eine VM instanziiere und dort dann Java ausführe. Das funktioniert auch wunderbar, allerdings bin ich mir bzgl. eines Punktes extrem unsicher:
Während bei der Richtung Java -> Native die VM dafür sorgt, daß alle Referencen abgeräumt werden (solange man kein NewGlobalRef auf die Referenz macht), kann sie dies in der von mir verwendeten Richtung C++ -> Java nicht tun: Der Garbagecollector darf die Objekte ja nicht einfach abräumen, weil er nicht wissen kann, ob ich sie in der C++ Application noch irgendwie verwende. Da referenzen in JNI als Pointer abgebildet werden gibt es offenbar auch keinen Automatismus in C++ (man hätte sich ja eine Klasse denken können, die im Destructor ein DeleteLocalRef macht).
Ich vermute daher, daß wenn man nicht explizit die Referenzen löscht, ein ziemliches MemoryLeak provoziert. Ist dem so? - Wenn ich mir im Netz die Beispiele anschaue, werden eigentlich nie Referenzen gelöscht. Also: was muß ich tun, damit die VM merkt, daß ich ein Objekt nicht mehr brauche?