Conteúdo do Curso
Java Avançado
Java Avançado
Transferência de Dados em Java
Como a informação é transmitida em Java?
Você já sabe, pelo curso anterior, que existem dois tipos de memória - stack e heap. Vamos analisar como os dados são armazenados nessas duas áreas de memória:
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; } }
Foram criadas 3 variáveis diferentes. Abaixo está um diagrama que ilustra como e onde elas serão armazenadas na memória:
Vamos analisar o que foi observado no diagrama:
- Observamos campos
String
na memória de pilha que são links para valores na memória heap. Dessa forma, não acessamos a memória heap diretamente toda vez. Em vez disso, acessamos inicialmente o link na memória de pilha, o que é mais rápido do que acessar a memória heap. Você já encontrou links para valores ao aprender sobre o tópico String Pool; - É possível ver que
int
não é armazenado na memória heap; seu valor é armazenado diretamente na memória de pilha. Isso se aplica a todos os tipos de dados primitivos (byte
,short
,int
,long
,float
,double
eboolean
). Assim, tipos de dados primitivos são passados em Java por valor. No entanto,String
não é um tipo de dado primitivo, então seu valor é armazenado na memória heap; - Um novo objeto é criado na memória heap para cada novo link. No entanto, se duas variáveis do mesmo tipo tiverem o mesmo valor, elas referenciarão o mesmo objeto na memória heap;
- O Integer Pool é uma área na memória de pilha onde todos os valores inteiros no intervalo de
-128
a127
são vinculados. Essa otimização é feita para melhorar o desempenho do tratamento de números em Java, já que números nesse intervalo são comumente utilizados. Lembre-se de que a memória de pilha opera mais rápido do que a memória heap, então obtemos respostas mais rápidas graças ao Integer Pool; - O String Pool é uma área na memória heap onde valores de string idênticos são armazenados.
Conclusão
Em Java, tudo é passado por valor. Para objetos, uma cópia da referência é passada, mas o objeto real na heap permanece inalterado (se for imutável, como String
).
Variáveis na pilha armazenam referências para objetos localizados na heap. Isso se aplica a todos os tipos de referência, incluindo String
.
1. O que é um Integer Pool em Java?
2. Como os dados são passados em Java, por referência ou por valor?
Tudo estava claro?
Obrigado pelo seu feedback!
Seção 1. Capítulo 2