Domanda

Ho una libreria C che vuole un buffer temporaneo per lo spazio zero. Sto pensando di passare l'indirizzo di un buffer di byte diretto ad esso.

  • E 'la VM mai permesso di spostare il buffer prima che sia in ultima analisi, liberato? La libreria nativa terrà al puntatore dopo il fotogramma JNI va via. La mia comprensione è che JNI riferimenti a oggetti locali non possono essere memorizzati nella cache perché la VM li può trasferirsi durante la GC. Questo vale anche per l'indirizzo del buffer?

  • Ho capito che la VM libererà memoria buffer se assegnare un buffer in Java e poi lasciate l'oggetto tampone uscire dall'ambito. Se creo un nuovo buffer nel codice nativo utilizzando NewDirectByteBuffer, chi è la responsabilità per liberare la memoria di massa?

  • Che cosa accade se creo un nuovo buffer nel codice nativo utilizzando NewDirectByteBuffer e un indirizzo già in uso da un buffer diretta? Sarà la memoria essere doppiamente-liberato? Conterà il riferimento VM il blocco di memoria e tentare di liberarlo quando l'ultimo buffer di referenziazione è garbage collection?

È stato utile?

Soluzione

  

E 'la VM mai permesso di riposizionare l'   tampone prima di essere infine liberato?

Non si trasferirà, perché il buffer diretto non è parte del mucchio GC.

  

Se creo un nuovo buffer in natale   codice utilizzando NewDirectByteBuffer, la cui   è la responsabilità per liberare la   memoria di massa?

E 'il tuo (codice nativo) la responsabilità per liberarlo. La JVM non poteva sapere quale metodo è stato utilizzato per destinare tale memoria di supporto (potrebbe essere malloc'd, potrebbe essere un buffer statico, ecc.)

  

Che cosa accade se creo un nuovo buffer   in codice nativo utilizzando   NewDirectByteBuffer e un indirizzo   già in uso da un buffer diretta?

Dato che la VM non tenterà di liberare la memoria il cui indirizzo viene passato alla NewDirectByteBuffer, non succederà nulla se si passa lo stesso indirizzo di due volte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top