2012-10-12 9 views
7

Sono solo curioso.
supponiamo che definisca un riferimento all'interno di un ciclo while/for.JAVA: riferimento definito all'interno di un loop

la JVM definisce questo riferimento ogni iterazione oppure è ottimizzato per definirlo solo una volta?

+2

Cosa intendi con "definire"? Dipende davvero da cosa intendi. La variabile verrà reinizializzata ogni volta, ma lo spazio di memoria verrà probabilmente riutilizzato. –

+1

Cosa intendi per "definire un riferimento"? A rigor di termini, il riferimento è il valore della variabile, che è ben lontano dall'allocazione di un oggetto. Queste due interpretazioni hanno risposte molto diverse. –

risposta

7

Definisce ogni volta e ha come ambito solo l'iterazione del ciclo.

Non appena l'iterazione del ciclo è terminata, è idoneo per GC.

Come ha commentato Louis Wasserman, la variabile verrà reinizializzata ogni volta, ma lo spazio di memoria verrà probabilmente riutilizzato.

+0

grazie. buono a sapersi – socksocket

+0

Prego. – kosa

+0

Non sarà idoneo per GC. Lo slot dello stack continuerà ad esistere fino a quando non verrà riutilizzato da una variabile successiva dichiarata dopo il ciclo, se presente, altrimenti fino alla chiusura del metodo. Non esiste un'istruzione JVM corrispondente alla parentesi di chiusura del ciclo, quindi non è possibile per la JVM sapere che lo slot non è più in uso. – EJP

2

È definito ogni volta. Non c'è ottimizzazione per quello (per quanto ne so).

1

- La definisce il riferimento everytime le un'iterazione, ma la portata del rinvio è attaccato solo a quella iterazione.

- Si consideri che avete dichiarato un riferimento al di fuori del ciclo, ma oggetto assegnare ad esso all'interno del ciclo, allora il riferimento rimane la stessa, ma fare riferimento nuovo oggetto di quel tipo in ogni iterazione.

4

Il riferimento è definito su ogni iterazione. Una volta che il codice è stato ottimizzato per il codice nativo, potrebbe essere spostato all'esterno del ciclo in modo che non debba avere un impatto sulle prestazioni. Se si imposta questo riferimento su un oggetto new ogni volta, è possibile creare un nuovo oggetto su ciascuna iterazione, a meno che anche la creazione dell'oggetto non sia stata ottimizzata.

Problemi correlati