Tenemos el concepto de punteros en C++. Ahora si asignamos algo de memoria en C++ y la pasamos a Java como referencia de objeto (usando JNI), entonces quién debería estar y quién la liberará.JNI, recolección de basura y Punteros-Java/C++ ¿quién debería hacer qué?
¿Será
1.) El recolector de basura lo hace automáticamente en Java?
2.) ¿Necesitamos explícitamente hacer una eliminación en el puntero en el método de finalizar la clase JNI envuelto?
3.) O simplemente debemos olvidar finalizar (como finalizadores no se puede confiar) y es responsabilidad de Java para llamar a un código C++, que elimina el objeto
4.) ¿O hay alguna manera de anular la planificación de la memoria directamente en Java (¿no está seguro de cómo Java interpreta un puntero de C++ para borrarlo)?
¿Cuál es la mejor práctica para hacer esto y viceversa (cuando pasamos objetos de Java a C++)?
+1 Definitivamente el asignador debe ser el de lanzar, y la asignación del lado de Java (si es posible) es "más limpio". – Viruzzo
Estoy de acuerdo en que es más limpio, especialmente si Java llama a C++ en lugar de a la inversa. –
Para el punto número 2, el método de lanzamiento en Java llamará al método C++ que realmente eliminará el objeto? ¿Cómo puede Java liberar directamente la memoria asignada en C++? – seahorse