Sobes.tech
Junior

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).