6

Sto cercando di capire di più sulla funzione dispose() della classe Window di AWT/Swing e su quello che fa. Immaginate la seguente serie di eventi:Java può riutilizzare le risorse GUI di sistema non disposte?

  • Un'istanza A di una derivata di finestra X viene raccolta dopo l'uscita dall'ambito. Smaltire è non chiamato prima della garbage collection.
  • Una nuova istanza di X, B viene creata e visualizzata.
  • B utilizza le risorse non disposte rimaste dopo che A era GC?

    Inoltre, per una derivata finestra Z, se ci sono molte istanze di Z, JRE è in grado di riutilizzare le risorse della finestra tra di loro?

    risposta

    1

    Questo è più da una comprensione generale di come funziona la memoria, ma:

    Se le risorse non sono stati smaltiti, non si possono usare perché sono ancora in fase ripresi. Quando le risorse non sono disposte/raccolte di dati inutili/non sono utilizzabili perché c'è qualcos'altro che usa quella memoria. Tuttavia, una volta fuori dal campo di applicazione, dovrebbe in effetti essere smaltito. Se non lo è, allora questo è un ma nella JVM che risulterebbe in un memory leak.

    Per la seconda parte, se si intendono i blocchi di memoria tra gli elementi, tutto dipende dalla presenza o meno di spazio. Ancora una volta, non sono al 100% su come la JVM gestisca la memoria, ma se hai bisogno di due blocchi di memoria e c'è solo un blocco tra Z1 e Z2 allora no, avrebbe bisogno di uno spazio contiguo in memoria.