1
00:00:12,000 --> 00:00:18,680
Hola Te saludo nuevamente o vuelvo a costa espero que estén listos para comenzar con esta elección.

2
00:00:18,900 --> 00:00:25,200
Vamos a estudiar a continuación el tema de memoria Stagg y GIP en IAVA están listos.

3
00:00:25,200 --> 00:00:31,560
Vamos memoria Stack IP en Java como en muchos lenguajes de programación.

4
00:00:31,630 --> 00:00:38,110
La memoria RAM Random Access Memory se utiliza para almacenar la información de nuestro programa mientras

5
00:00:38,170 --> 00:00:46,360
éste se ejecuta Java ejecuta un proceso y a su vez internamente existen dos clasificaciones para almacenar

6
00:00:46,360 --> 00:00:51,950
los valores de nuestros programas conocidos como memoria Stack y memoria IP.

7
00:00:52,030 --> 00:00:57,610
La memoria Stack se utiliza para almacenar las variables locales y también las llamadas de funciones

8
00:00:57,670 --> 00:01:04,420
en Java las variables almacenadas en este espacio de memoria normalmente tienen un periodo de vida corto

9
00:01:04,930 --> 00:01:11,490
únicamente mientras terminan la función o método en el que se están ejecutando en cambio la memoria

10
00:01:11,570 --> 00:01:18,750
IP se utiliza para almacenar los objetos Java incluyendo sus atributos los objetos almacenados en este

11
00:01:18,750 --> 00:01:23,520
espacio de memoria normalmente tienen un tiempo de duración más prolongado.

12
00:01:23,520 --> 00:01:29,400
Esto quiere decir que las variables que creamos no almacenan el objeto en sí mismo sino sólo guardan

13
00:01:29,400 --> 00:01:32,310
la referencia del objeto en la figura.

14
00:01:32,370 --> 00:01:39,090
Podemos observar que la referencia del objeto que es representada por un hexadecimal por ejemplo el

15
00:01:39,090 --> 00:01:49,150
valor 0 x 3 3 3 contiene la dirección de memoria donde está almacenado este objeto y por lo tanto la

16
00:01:49,150 --> 00:01:53,790
variable local P1 almacena únicamente esta referencia de memoria

17
00:01:56,740 --> 00:02:04,720
así que la variable local P1 únicamente almacena la dirección de memoria donde está almacenado donde

18
00:02:04,750 --> 00:02:11,830
fue creado este objeto y por otro lado por ejemplo una variable de tipo primitivo almacena directamente

19
00:02:11,890 --> 00:02:20,370
el valor donde está creada esta variable entender esto es muy importante para temas como la recolección

20
00:02:20,370 --> 00:02:27,120
de objetos en Java debido a que el recolector de basura únicamente podrá eliminar los objetos que no

21
00:02:27,120 --> 00:02:34,320
estén siendo apuntados por ninguna variable es decir que este objeto que se ha creado de tipo Persona

22
00:02:34,810 --> 00:02:38,900
como está siendo apuntado o referenciado por la variable P1.

23
00:02:39,030 --> 00:02:45,630
Este objeto no puede ser eliminado por el recolector de basura sin embargo si aquí pusiéramos esta variable

24
00:02:45,630 --> 00:02:52,470
P1 igual a Null es decir que no tiene ninguna referencia de ningún objeto se rompería este link.

25
00:02:52,470 --> 00:02:59,070
Esta referencia y por lo tanto al no tener ninguna otra variable que apunte a este objeto persona este

26
00:02:59,070 --> 00:03:02,410
objeto es candidato a eliminarse de la memoria.

27
00:03:02,490 --> 00:03:07,370
En este caso la memoria Agip que es donde se almacenan los objetos en Java.

28
00:03:07,590 --> 00:03:13,060
De esta manera el recolector de basura garbage collector puede buscar aquellos objetos en la memoria

29
00:03:13,070 --> 00:03:19,560
Agip que ya no estén siendo referenciados por ninguna otra variable y finalmente liberar el espacio

30
00:03:19,560 --> 00:03:22,290
en memoria que ocupaba dicho objeto.

31
00:03:22,290 --> 00:03:27,390
Con esto podemos agregar otra importante distinción entre clase y objeto.

32
00:03:27,390 --> 00:03:35,910
Una clase define un tipo para ser posteriormente instancia es decir con el objeto de crear objetos.

33
00:03:35,910 --> 00:03:42,780
Esto quiere decir que un objeto ocupa un espacio real en memoria y son los objetos los que utilizaremos

34
00:03:42,840 --> 00:03:51,420
en la mayoría de nuestros programas para enviar y recibir mensajes mediante el uso de sus métodos asignando

35
00:03:51,420 --> 00:03:53,520
referencias en memoria.

36
00:03:53,790 --> 00:03:59,850
A diferencia de lo que pudiéramos pensar en Java una variable de tipo Object únicamente almacena una

37
00:03:59,850 --> 00:04:02,280
referencia a los objetos que son creados

38
00:04:05,000 --> 00:04:11,810
por lo que podemos revisar el siguiente código en el cual estamos creando una variable P 1 la cual está

39
00:04:11,900 --> 00:04:20,220
apuntando a una referencia de un objeto que se está creando de tipo Persona pero esta misma referencia.

40
00:04:20,220 --> 00:04:25,890
Por ejemplo si tuviera el valor de 0 3 3 3 cualquier valor de memoria.

41
00:04:26,100 --> 00:04:32,820
Este mismo valor lo podemos asignar a otra variable también por ejemplo en este caso de tipo Persona.

42
00:04:33,060 --> 00:04:35,450
En este caso una variable llamada P2.

43
00:04:35,520 --> 00:04:42,090
De esta manera ambas variables estarían apuntando al mismo objeto que se ha creado en este momento.

44
00:04:42,090 --> 00:04:49,880
Veamos cómo se ve esta figura de esta manera estamos creando un objeto de tipo Persona

45
00:04:56,620 --> 00:05:04,360
de esta manera la variable P1 almacena una referencia al objeto creado de tipo persona pero también

46
00:05:04,390 --> 00:05:06,030
en la siguiente línea de código.

47
00:05:06,100 --> 00:05:12,220
La variable creada P2 también se le asigna a la misma referencia y por lo tanto existen dos variables

48
00:05:12,250 --> 00:05:20,470
P1 y P2 que apuntan al mismo objeto así que ambas variables apuntan al mismo objeto y cualquier cambio

49
00:05:20,470 --> 00:05:27,300
que hiciéramos con una variable lo vería reflejado en automático también la otra variable debido a que

50
00:05:27,300 --> 00:05:33,530
lo que se modifica es el objeto y no la referencia que almacena la variable en sí misma.

51
00:05:33,550 --> 00:05:39,670
Por lo tanto ahora son dos variables las que están apuntando al mismo objeto es decir que ambas variables

52
00:05:39,700 --> 00:05:44,020
podrán acceder a lo que el objeto permita según la clase definida.

53
00:05:44,140 --> 00:05:51,620
Por ejemplo sus atributos o métodos que haya definido es importante observar que no se está creando

54
00:05:51,680 --> 00:05:58,760
un segundo objeto ya que solamente hay una llamada de la palabra New y por lo tanto sólo hay un objeto

55
00:05:58,760 --> 00:06:05,780
creado lo que almacenan la variable P2 es sólo el valor de la referencia en memoria del objeto persona

56
00:06:05,780 --> 00:06:08,970
creado cada vez que utilicemos la palabra New.

57
00:06:09,020 --> 00:06:11,950
Recibiremos una nueva referencia de memoria.

58
00:06:11,990 --> 00:06:18,290
Es importante notar esto ya que hasta este momento es que se creará un nuevo objeto y no antes.

59
00:06:18,620 --> 00:06:27,500
Si tuviéramos una línea como la que sigue uno igual a NULL entonces se perdería esta referencia.

60
00:06:27,500 --> 00:06:34,790
Y aquí se almacenaría el valor de Null en esta variable y por lo tanto solamente la variable P2 mantendría

61
00:06:34,880 --> 00:06:42,380
el acceso al objeto persona pero la variable P1 ya no podría acceder a los atributos o métodos del objeto

62
00:06:42,380 --> 00:06:43,530
creado.

63
00:06:43,610 --> 00:06:50,270
Sin embargo hasta este momento debido a que existe una variable en este caso la variable P2 que todavía

64
00:06:50,330 --> 00:06:57,440
apunta a este objeto el recolector de basura no puede eliminar este objeto persona creado en la línea

65
00:06:57,560 --> 00:07:05,530
1 así que aunque eliminemos esta referencia del objeto persona existe todavía una variable que sigue

66
00:07:05,530 --> 00:07:12,850
apuntando a este objeto pero si tuviéramos la siguiente línea ahora P2 igual a NULL

67
00:07:16,780 --> 00:07:17,380
entonces.

68
00:07:17,410 --> 00:07:25,030
Ahora si tanto la variable P1 como la variable P2 ya no estarían apuntando al objeto persona y por lo

69
00:07:25,030 --> 00:07:31,990
tanto al romperse las referencias a este objeto entonces ahora si este objeto es un candidato para eliminarse

70
00:07:32,020 --> 00:07:35,230
por el recolector de basura de la memoria AGIP.

71
00:07:35,500 --> 00:07:41,470
Así que un objeto es candidato a eliminarse de la memoria hasta que ninguna variable esté apuntando

72
00:07:41,530 --> 00:07:46,480
a dicho objeto es decir que ninguna variable contenga su referencia.

73
00:07:46,480 --> 00:07:53,090
El proceso de recolección de basura es un proceso que demanda muchos recursos por lo que llamar al método

74
00:07:53,090 --> 00:08:00,450
System punto GC que significa Garabaya colector no garantiza que se ejecute el recolector de basura.

75
00:08:00,520 --> 00:08:06,820
Sin embargo con la llamada a esta función le estamos indicando aullaba que en cuanto sea posible ejecute

76
00:08:06,880 --> 00:08:13,200
el recolector y por tanto elimine los objetos de memoria que ya no están siendo utilizados.

77
00:08:13,330 --> 00:08:17,830
Es decir que ya no exista ninguna variable apuntando a estos objetos

78
00:08:24,200 --> 00:08:26,120
no hay ejercicio para esta elección.

79
00:08:26,120 --> 00:08:31,430
Sin embargo utilizaremos estos conceptos a lo largo del curso y en los siguientes temas.
