Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Transferência de Dados em Java | Estrutura Profunda do Java
Java Avançado
course content

Conteúdo do Curso

Java Avançado

Java Avançado

1. Estrutura Profunda do Java
2. Métodos
3. String Avançado
4. Classes
5. Classes Avançadas

book
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

Main.java

copy
123456789
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 e boolean). 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 a 127 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?

question mark

O que é um Integer Pool em Java?

Select the correct answer

question mark

Como os dados são passados em Java, por referência ou por valor?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

Java Avançado

Java Avançado

1. Estrutura Profunda do Java
2. Métodos
3. String Avançado
4. Classes
5. Classes Avançadas

book
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

Main.java

copy
123456789
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 e boolean). 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 a 127 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?

question mark

O que é um Integer Pool em Java?

Select the correct answer

question mark

Como os dados são passados em Java, por referência ou por valor?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 2
some-alt