2012-10-12 43 views
7

Solo tengo curiosidad.
supongamos que defino una referencia dentro de un ciclo while/for.JAVA: referencia definida dentro de un bucle

¿La JVM define esta referencia en cada iteración, o está optimizada para definirla solo una vez?

+2

¿Qué quiere decir "definir"? Realmente depende de lo que quieras decir. La variable se reinicializará siempre, pero es probable que el espacio de memoria se reutilice. –

+1

¿Qué quiere decir con "definir una referencia"? Estrictamente hablando, la referencia es el valor de la variable, que está muy lejos de la asignación de un objeto. Esas dos interpretaciones tienen respuestas muy diferentes. –

Respuesta

7

Define todas las veces y limita solo a esa iteración de bucle.

Tan pronto como se complete la iteración del ciclo, es elegible para GC.

Como comentó Louis Wasserman, la variable se reinicializará siempre, pero es probable que el espacio de memoria se reutilice.

+0

gracias. bueno saber – socksocket

+0

De nada. – kosa

+0

No será elegible para GC. La ranura de la pila continuará existiendo hasta que la reutilice una variable posterior declarada después del bucle, de lo contrario, hasta que el método finalice. No hay instrucción JVM correspondiente al corsé de cierre del bucle, por lo que la JVM no puede saber que el slot ya no está en uso. – EJP

2

Se define siempre. No hay optimización para eso (que yo sepa).

1

- El define la referencia everytime las iteraciones de bucle, pero el alcance de la referencia está unido sólo a esa iteración.

- Considere que tiene declaró una referencia fuera del bucle, pero objeto asignar a ella dentro el bucle, entonces la referencia sigue siendo el mismo, pero la referencia nuevo objeto de ese tipo en todas las iteración.

4

La referencia se define en cada iteración. Una vez que el código ha sido optimizado para el código nativo, podría moverse fuera del ciclo, por lo que no tiene que tener un impacto en el rendimiento. Si establece esta referencia a un objeto new cada vez, puede crear un nuevo objeto en cada iteración a menos que la creación del objeto también se haya optimizado.

Cuestiones relacionadas