Autor Tema: duda arrays en java  (Leído 2110 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
duda arrays en java
« en: 28 de Mayo de 2013, 19:52:12 »
Me surge una duda sobre los arrays en Java, si yo tengo definido un array de la siguiente forma:

Código: [Seleccionar]
int[] n_filas = new int[tabla.length];

donde el tamaño del array está definido por el numero de filas de una tabla. Ese codigo se ejecuta cada vez que pulso un botón que actualiza la tabla, y esta puede tener mas o menos filas.

¿Que ocurre internamente? es decir, si una vez tiene un tamaño de 10, y la siguiente vez que paso por ese codigo el tamaño es de 4, ¿se liberan 6 posiciones del array en memoria?

Saludos!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: duda arrays en java
« Respuesta #1 en: 28 de Mayo de 2013, 20:22:47 »
Java posee Garbage Collector.

Hay que tener presente que cada vez que aparece un new, se estará creando un objeto que ocupa lugar en memoria.

Cuando se ejecuta esa línea, Java reserva memoria y guarda el puntero al objeto en n_filas. Para que esa memoria se libere mediante el Garbage Collector, no tiene que existir referencia en uso al objeto. Si siguese existiendo por algun motivo al menos una, Java no libera la memoria y continúa reservando memoria en cada pasada por la línea mencionada. Eso lleva a los famosos desbordamientos de memoria.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: duda arrays en java
« Respuesta #2 en: 29 de Mayo de 2013, 09:53:12 »
Bien, gracias por la respuesta Bruno.

Esa variable la uso localmente en un evento de un botón, y luego al final de ese evento la paso por parametro a un JDialog, este hace uso de ella.

Entonces para que se libere la memoria, si al salir del JDialog pongo un n_filas=null; (en el JDialog llamé igual la variable) y también lo pongo en el evento justo antes de hacer el new  listo, ¿no? (logicamente en la clase del evento tengo que definir un array global: int[] n_filas; y en evento hacer el n_filas=null; seguido de  n_filas=new).

Saludos!
« Última modificación: 29 de Mayo de 2013, 10:17:55 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: duda arrays en java
« Respuesta #3 en: 29 de Mayo de 2013, 10:32:48 »
En objetos sencillos, no anidados como este, hacer null la variable basta para asegurarse que el Garbage Collector se hará cargo de ella. No sucede lo mísmo en objetos de, por ejemplo, tipo árbol donde por más que hagas null la raíz del árbol, pueden seguir existiendo referencias a algunas ramas del mísmo, y por ende el Garbage Collector no descargará el árbol completo, sólo aquello que ha quedado sin referencia.

Si existe una parte o un todo de un objeto con al menos una referencia alcanzable por el usuario, entonces el objeto no será procesado por el Garbage Collector y persistirá en la memoria. Caso contrario la memoriia ocupada por dicho objeto será liberada en la próxima pasada del Garbage Collector.

saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.