Pregunta

Tengo una biblioteca de C que quiere un búfer temporal para el espacio cero. Estoy pensando en pasar la dirección de una memoria intermedia de bytes directo a la misma.

  • ¿Es la VM nunca permitió a la ubicación de la memoria intermedia antes de ser finalmente liberado? La biblioteca nativa llevará a cabo en al puntero después de la trama JNI desaparece. Mi entendimiento es que las referencias a objetos JNI local no pueden almacenar en caché debido a que la máquina virtual puede reubicarlos en GC. ¿Se aplica esto a la dirección del buffer?

  • Yo entiendo que la máquina virtual liberará memoria intermedia si asignar un búfer en Java y luego dejar que el objeto buffer de ir fuera de alcance. Si se crea un nuevo búfer en código nativo utilizando NewDirectByteBuffer, quién es la responsabilidad de liberar la memoria de respaldo?

  • ¿Qué pasa si se crea un nuevo búfer en código nativo utilizando NewDirectByteBuffer y una dirección ya en uso por un buffer directa? Será la memoria liberada por partida doble-? Contará la referencia VM el bloque de memoria y tratar de liberarla cuando el último búfer referencia a ella se recoge la basura?

¿Fue útil?

Solución

  

¿Es la VM jamás permitió trasladar la   búfer antes de que se liberó en última instancia?

No se cambia su posición, porque el búfer directa no es parte de la pila de GC.

  

Si se crea un nuevo búfer en nativa   código usando NewDirectByteBuffer, cuya   es la responsabilidad de liberar el   memoria copias?

Es su responsabilidad (código nativo) para liberarla. La JVM no podía saber qué método se utilizó para asignar ese almacén de respaldo (podría ser malloc'd, podría ser un buffer estático, etc.)

  

¿Qué pasa si se crea un nuevo buffer   en código nativo utilizando   NewDirectByteBuffer y una dirección   ya en uso por un buffer directa?

Dado que la máquina virtual no intentará liberar la memoria cuya dirección se pasa a NewDirectByteBuffer, no pasará nada si pasa la misma dirección dos veces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top