Programación II
Tema 0: Memoria dinámica
Introducción
La memoria dinámica es una técnica utilizada en programación para poder
almacenar una cantidad variable de datos durante la ejecución de un programa.
En Java no existen los vectores o matrices estáticas, y siempre es necesario
reservar memoria para arrays y matrices, ya que son estructuras de memoria
dinámica.
Ejemplo declarando una variable de tipo array de una dimensión (vector) y de
dos dimensiones (matriz) respectivamente:
En este caso, todas las filas de la matriz tienen el mismo número de columnas,
pero no tiene por qué ser así. En este ejemplo se crea una matriz con filas de
tamaño 1, 2 y 3 respectivamente:
, Tema 0 Memoria dinámica
Punteros y referencia a objetos
El uso de punteros es común en estructuras de datos dinámicas en otros
lenguajes de programación, pero en Java no se pueden utilizar punteros. En su
lugar, se utiliza la referencia de objetos, que es similar a un puntero, pero con
algunas diferencias como la imposibilidad de modificar dicha referencia, por
ejemplo, no se pueden hacer operaciones aritméticas con ella. Otra diferencia
importante es que, en Java, la gestión de memoria se realiza automáticamente a
través del colector de basura, que libera la memoria asignada a un objeto
cuando ya no se utiliza, por lo que los programadores no tienen que
preocuparse por liberarla manualmente.
En Java, la referencia de objetos se utiliza para acceder a objetos almacenados
en la memoria. Cuando se crea un objeto en Java, se reserva memoria dinámica
para él y se devuelve una referencia a esa memoria. La referencia no es la
memoria en sí misma, sino que simplemente apunta a ella.
Paso de parámetros (argumentos)
En cuanto al paso de parámetros en Java, siempre se hace por valor, lo que
significa que, cuando se llama a un método y se le pasan argumentos siendo
estos de un tipo primitivo (int, double, char, boolean…), se crea una copia de los
valores de esos argumentos y se envían al método, que trabaja con esas copias,
por lo que, cualquier cambio que se haga en estas, no afectará a las variables
originales.
Sin embargo, cuando se pasa la variable de un objeto como argumento, se está
pasando una copia de la referencia del objeto y no una copia del objeto en sí.
Esto significa que, si el método modifica el objeto referenciado por esta copia, el
objeto original también se verá modificado. Por otro lado, si el método asigna
un nuevo objeto a la referencia, la variable original no se verá afectada.