2012-03-09 12 views
5

Quando una matrice di oggetti non viene più referenziata, anche gli oggetti di quell'array sono trucidati? (Supponendo che non le variabili fanno riferimento gli elementi)In Java, come viene raccolta una matrice di oggetti?

In questa pagina, http://java.sys-con.com/node/37613 dice - "Il pericolo più grande sta mettendo un oggetto in una collezione e dimenticando per rimuoverlo La memoria utilizzata da quell'oggetto non sarà mai recuperato. ".

Se si è sicuri di annullare i riferimenti, perché tale memoria non sarà reclamata?

Grazie

+0

Perché se non si annullano i riferimenti, non verrà recuperato. –

risposta

4

Quando un array di oggetti non viene fatto riferimento più, fa gli oggetti in tale matrice sono spazzatura raccolti troppo? (supponendo che nessuna variabile sia facendo riferimento agli elementi)

Sì.

"Il pericolo più grande è mettere un oggetto in una collezione e dimenticando per rimuoverlo. La memoria utilizzata da quell'oggetto non sarà mai recuperato."

Questo è quando si sono in possesso di un riferimento alla collezione. Ad esempio, se hai uno Map in cui inserisci un valore-chiave e poi dimentichi di rimuoverlo, rimane lì per sempre. Pensa alle sessioni http, se usi qualcosa in ServerContext o qualcosa di simile all'inizio della richiesta usando l'ID di sessione come chiave ma non riesci a rimuoverlo alla fine dell'elaborazione della richiesta ..

2

Per la prima domanda, la risposta è sì, assolutamente : gli oggetti all'interno dell'array non referenziato e nessun altro riferimento vengono recuperati dalla garbage collection.

Quanto alla seconda domanda, i documento parla immissione dimenticare un oggetto all'interno di una collezione riferimento, per esempio una cache di qualche tipo, un campo statico, un negozio locale dei thread, ecc

1

Si non sarà reclamato se nulla lo fa riferimento. L'articolo dice che se si annulla un riferimento, ma l'oggetto è ancora in una collezione referenziata (quindi referenziato), non verrà raccolto.

1

In generale, tutto ciò che non è referenziato è garbage collection. Quindi, sì, quegli oggetti sarebbero spazzatura raccolti.

Si noti inoltre che:

  1. Un array non è una raccolta.
  2. Penso che la persona che ha scritto ciò significhi assicurarsi di ricordare tutti i luoghi a cui si fa riferimento a un oggetto, in modo che se si rimuova lo , lo si rimuova (e non ci si aspetta riferimenti ad esso).
Problemi correlati