Contenido del Curso
Java Avanzado
Java Avanzado
Transferencia de Datos en Java
¿Cómo se transmite la información en Java?
Sabes por el curso anterior que existen dos tipos de memoria: stack y heap. Veamos cómo se almacenan los datos en estas dos áreas de memoria:
Main.java
package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }
Hemos creado 3 variables diferentes. A continuación se muestra un diagrama que ilustra cómo y dónde se almacenarán en la memoria:
Analicemos lo que se observa en el diagrama:
- Se observan campos
String
en la memoria de pila que son enlaces a valores en la memoria heap. De este modo, no se accede directamente a la memoria heap cada vez. En su lugar, se accede inicialmente al enlace en la memoria de pila, lo cual es más rápido que acceder a la memoria heap. Ya se han encontrado enlaces a valores al aprender sobre el tema de la String Pool; - Se puede ver que
int
no se almacena en la memoria heap; su valor se almacena directamente en la memoria de pila. Esto aplica para todos los tipos de datos primitivos (byte
,short
,int
,long
,float
,double
yboolean
). Por lo tanto, los tipos de datos primitivos se pasan en Java por valor. Sin embargo,String
no es un tipo de dato primitivo, por lo que su valor se almacena en la memoria heap; - Se crea un nuevo objeto en la memoria heap para cada nuevo enlace. Sin embargo, si dos variables del mismo tipo tienen el mismo valor, referenciarán al mismo objeto en la memoria heap;
- El Integer Pool es un área en la memoria de pila donde todos los valores enteros en el rango de
-128
a127
están enlazados. Esta optimización se realiza para mejorar el rendimiento en el manejo de números en Java, ya que los números en este rango son comúnmente utilizados. Recuerde que la memoria de pila opera más rápido que la memoria heap, por lo que se obtienen respuestas más rápidas gracias al Integer Pool; - El String Pool es un área en la memoria heap donde se almacenan valores de cadenas idénticas.
Conclusión
En Java, todo se pasa por valor. Para los objetos, se pasa una copia de la referencia, pero el objeto real en el heap permanece sin cambios (si es inmutable, como String
).
Las variables en la pila almacenan referencias a objetos ubicados en el heap. Esto aplica para todos los tipos de referencia, incluyendo String
.
1. ¿Qué es un Integer Pool en Java?
2. ¿Cómo se pasan los datos en Java, por referencia o por valor?
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 1. Capítulo 2