Hola Te saludo nuevamente o vuelvo a costa espero que estén listos para comenzar con esta elección.
Vamos a estudiar a continuación el tema de memoria Stagg y GIP en IAVA están listos.
Vamos memoria Stack IP en Java como en muchos lenguajes de programación.
La memoria RAM Random Access Memory se utiliza para almacenar la información de nuestro programa mientras
éste se ejecuta Java ejecuta un proceso y a su vez internamente existen dos clasificaciones para almacenar
los valores de nuestros programas conocidos como memoria Stack y memoria IP.
La memoria Stack se utiliza para almacenar las variables locales y también las llamadas de funciones
en Java las variables almacenadas en este espacio de memoria normalmente tienen un periodo de vida corto
únicamente mientras terminan la función o método en el que se están ejecutando en cambio la memoria
IP se utiliza para almacenar los objetos Java incluyendo sus atributos los objetos almacenados en este
espacio de memoria normalmente tienen un tiempo de duración más prolongado.
Esto quiere decir que las variables que creamos no almacenan el objeto en sí mismo sino sólo guardan
la referencia del objeto en la figura.
Podemos observar que la referencia del objeto que es representada por un hexadecimal por ejemplo el
valor 0 x 3 3 3 contiene la dirección de memoria donde está almacenado este objeto y por lo tanto la
variable local P1 almacena únicamente esta referencia de memoria
así que la variable local P1 únicamente almacena la dirección de memoria donde está almacenado donde
fue creado este objeto y por otro lado por ejemplo una variable de tipo primitivo almacena directamente
el valor donde está creada esta variable entender esto es muy importante para temas como la recolección
de objetos en Java debido a que el recolector de basura únicamente podrá eliminar los objetos que no
estén siendo apuntados por ninguna variable es decir que este objeto que se ha creado de tipo Persona
como está siendo apuntado o referenciado por la variable P1.
Este objeto no puede ser eliminado por el recolector de basura sin embargo si aquí pusiéramos esta variable
P1 igual a Null es decir que no tiene ninguna referencia de ningún objeto se rompería este link.
Esta referencia y por lo tanto al no tener ninguna otra variable que apunte a este objeto persona este
objeto es candidato a eliminarse de la memoria.
En este caso la memoria Agip que es donde se almacenan los objetos en Java.
De esta manera el recolector de basura garbage collector puede buscar aquellos objetos en la memoria
Agip que ya no estén siendo referenciados por ninguna otra variable y finalmente liberar el espacio
en memoria que ocupaba dicho objeto.
Con esto podemos agregar otra importante distinción entre clase y objeto.
Una clase define un tipo para ser posteriormente instancia es decir con el objeto de crear objetos.
Esto quiere decir que un objeto ocupa un espacio real en memoria y son los objetos los que utilizaremos
en la mayoría de nuestros programas para enviar y recibir mensajes mediante el uso de sus métodos asignando
referencias en memoria.
A diferencia de lo que pudiéramos pensar en Java una variable de tipo Object únicamente almacena una
referencia a los objetos que son creados
por lo que podemos revisar el siguiente código en el cual estamos creando una variable P 1 la cual está
apuntando a una referencia de un objeto que se está creando de tipo Persona pero esta misma referencia.
Por ejemplo si tuviera el valor de 0 3 3 3 cualquier valor de memoria.
Este mismo valor lo podemos asignar a otra variable también por ejemplo en este caso de tipo Persona.
En este caso una variable llamada P2.
De esta manera ambas variables estarían apuntando al mismo objeto que se ha creado en este momento.
Veamos cómo se ve esta figura de esta manera estamos creando un objeto de tipo Persona
de esta manera la variable P1 almacena una referencia al objeto creado de tipo persona pero también
en la siguiente línea de código.
La variable creada P2 también se le asigna a la misma referencia y por lo tanto existen dos variables
P1 y P2 que apuntan al mismo objeto así que ambas variables apuntan al mismo objeto y cualquier cambio
que hiciéramos con una variable lo vería reflejado en automático también la otra variable debido a que
lo que se modifica es el objeto y no la referencia que almacena la variable en sí misma.
Por lo tanto ahora son dos variables las que están apuntando al mismo objeto es decir que ambas variables
podrán acceder a lo que el objeto permita según la clase definida.
Por ejemplo sus atributos o métodos que haya definido es importante observar que no se está creando
un segundo objeto ya que solamente hay una llamada de la palabra New y por lo tanto sólo hay un objeto
creado lo que almacenan la variable P2 es sólo el valor de la referencia en memoria del objeto persona
creado cada vez que utilicemos la palabra New.
Recibiremos una nueva referencia de memoria.
Es importante notar esto ya que hasta este momento es que se creará un nuevo objeto y no antes.
Si tuviéramos una línea como la que sigue uno igual a NULL entonces se perdería esta referencia.
Y aquí se almacenaría el valor de Null en esta variable y por lo tanto solamente la variable P2 mantendría
el acceso al objeto persona pero la variable P1 ya no podría acceder a los atributos o métodos del objeto
creado.
Sin embargo hasta este momento debido a que existe una variable en este caso la variable P2 que todavía
apunta a este objeto el recolector de basura no puede eliminar este objeto persona creado en la línea
1 así que aunque eliminemos esta referencia del objeto persona existe todavía una variable que sigue
apuntando a este objeto pero si tuviéramos la siguiente línea ahora P2 igual a NULL
entonces.
Ahora si tanto la variable P1 como la variable P2 ya no estarían apuntando al objeto persona y por lo
tanto al romperse las referencias a este objeto entonces ahora si este objeto es un candidato para eliminarse
por el recolector de basura de la memoria AGIP.
Así que un objeto es candidato a eliminarse de la memoria hasta que ninguna variable esté apuntando
a dicho objeto es decir que ninguna variable contenga su referencia.
El proceso de recolección de basura es un proceso que demanda muchos recursos por lo que llamar al método
System punto GC que significa Garabaya colector no garantiza que se ejecute el recolector de basura.
Sin embargo con la llamada a esta función le estamos indicando aullaba que en cuanto sea posible ejecute
el recolector y por tanto elimine los objetos de memoria que ya no están siendo utilizados.
Es decir que ya no exista ninguna variable apuntando a estos objetos
no hay ejercicio para esta elección.
Sin embargo utilizaremos estos conceptos a lo largo del curso y en los siguientes temas.