Normalmente proporcionan API para crear y publicar una referencia.
Por ejemplo, interfaz nativa de Java proporciona referencias globales que permite el fijar un objeto de Java en la memoria hasta que el programa C se hace con él a través NewGlobalRef
y DeleteGlobalRef
NewGlobalRef
Crea una nueva referencia mundial para el objeto a que se refiere por el argumento obj. El argumento obj puede ser una referencia global o local. referencias globales, deben eliminarse de forma explícita de llamando DeleteGlobalRef()
y también proporciona referencias locales que sólo duran tanto como Java ha entregado el control a C para:
referencias locales son válidos para la duración de una llamada de método nativo. Se liberan automáticamente después de que el método nativo regrese.
El JVM embedding API proporciona un mecanismo similar que permite fijar un objeto en la memoria hasta que el programa C determina que se ha terminado con él.
Python's C extension API proporciona una API similar a la JNI.
Una referencia prestada se puede cambiar a una referencia de propiedad llamando al Py_INCREF()
.
El propietario de una referencia es responsable de llamar al Py_DECREF()
cuando la referencia ya no es necesaria.
Los nombres pitón reflejan el hecho de que Python usa el recuento de referencias * pero el API es básicamente el mismo que el de JNI que se basa en un conteo colector de basura no-ref - que tiene una función que los pasadores de una región de memoria administrada por el intérprete y otra que libera una región anteriormente anclada al intérprete.
* - python no es un verdadero enfoque de recuento de ref.Desde la misma página "Si bien Python usa la implementación tradicional de recuento de referencias, también ofrece un detector de ciclos que funciona para detectar ciclos de referencia".
posible duplicado de [¿Hay un destructor para Java?] (Http://stackoverflow.com/questions/171952/is-there-a-destructor-for-java) – Raedwald