Como é que os dados são armazenados em Java?
sobes.tech IA
Resposta da IA
Os dados em Java são armazenados na memória de diferentes formas:
-
Tipos primitivos: Os valores são armazenados diretamente em locais de memória alocados (por exemplo, a pilha). Incluem
byte,short,int,long,float,double,boolean,char.// int - tipo primitivo, o valor é armazenado diretamente int age = 30; -
Tipos referenciados: Na memória, é armazenada uma referência (endereço) que aponta para o local onde o objeto está (no heap). Incluem classes, interfaces, arrays.
// String - tipo referenciado, data armazena a referência ao objeto "Hello" no heap String data = "Hello"; // Um objeto CustomObject é criado no heap, obj armazena a referência CustomObject obj = new CustomObject(); -
Arrays: Objetos no heap que contêm um conjunto de elementos (sejam valores primitivos ou referências a outros objetos). A variável do array armazena a referência a esse objeto.
// Array de ints, em nums armazena a referência ao objeto array no heap int[] numbers = new int[10]; // Array de Strings, em names armazena a referência ao array de objetos String String[] names = {"Alice", "Bob"}; -
Objetos: Criados no heap. A variável armazena a referência ao objeto. Dentro do objeto, podem estar valores primitivos de seus campos ou referências a outros objetos.
// Classe Person com campos class Person { String name; // Referência a um objeto String int age; // Valor primitivo } // Criação de um objeto Person no heap, person armazena a referência Person person = new Person(); person.name = "Charlie"; person.age = 25; -
Strings: Objetos da classe
String, armazenados no heap. Strings são imutáveis. Seus valores frequentemente são armazenados no String Pool para otimização, quando criadas como literais.// Literal de String, pode ser criado no String Pool String str1 = "Java"; // Criação de um novo objeto String no heap String str2 = new String("Java"); -
Coleções (List, Set, Map, etc.): Objetos armazenados no heap. Contêm referências a outros objetos.
// ArrayList armazena referências aos objetos String adicionados List<String> fruits = new ArrayList<>(); fruits.add("Apple"); fruits.add("Banana"); -
Pilha (Stack): Usada para armazenar variáveis locais (tipos primitivos), referências a objetos e informações sobre chamadas de métodos (call stack). O ciclo de vida dos dados na pilha está ligado ao método que os chama.
-
Heap: Usado para armazenar todos os objetos. A limpeza da memória no heap é feita pelo coletor de lixo (Garbage Collector).
Assim, os dados em Java são distribuídos entre a pilha (para primitivos e referências) e o heap (para objetos).