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
123456789package 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?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain the difference between stack and heap memory in more detail?
How does passing by value work for objects in Java?
What is the String Pool and why is it important?
Awesome!
Completion rate improved to 2.63
Transferência de Dados em Java
Deslize para mostrar o menu
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
123456789package 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?
Obrigado pelo seu feedback!