Questão de Programação — Plataforma Java — FUNDATEC 2023
- Código
- qq896824
- Banca
- FUNDATEC
- Órgão
- PROCERGS
- Ano
- 2023
- Nível
- Superior
- Cargo
- ANC - Analista em Computação - Ênfase em Programação de Sistemas na Tecnologia Java
- AHeap
- BPerm
- CStack
- DSwap
- ESweep
GabaritoA — Heap
Gabarito: letra A (Heap). Instâncias de objetos em Java são sempre alocadas na área de heap da memória gerenciada pela JVM. A variável sb (a referência) é armazenada na stack, mas o objeto StringBuilder propriamente dito fica no heap. É o conceito fundamental de gerenciamento de memória em Java.
A banca testa o conhecimento sobre as regiões de memória da JVM: heap, stack, metaspace (antigo PermGen) e algoritmos de garbage collection. Vamos analisar cada alternativa.
Muitos candidatos confundem a referência (que fica na stack) com o objeto (que fica no heap). A pergunta é clara: "a instância de sb" – ou seja, o objeto. Outra armadilha: lembrar do PermGen/Metaspace (que armazena metadados de classe, não instâncias) ou inventar áreas como "Swap" (memória virtual do SO) e "Sweep" (fase do GC).
O heap é a região da JVM onde todos os objetos Java são alocados dinamicamente. Ao executar new StringBuilder(...), a JVM aloca memória no heap para o novo objeto. A referência sb (variável local) fica na stack, mas a instância em si reside no heap. Portanto, a alternativa está correta.
Perm (Permanent Generation) é uma área que existia até o Java 7, substituída pelo Metaspace no Java 8 em diante. Ela armazena metadados de classes, métodos, constantes e strings internadas – não armazena objetos de instância como StringBuilder. Confundir essa área com o heap é um erro clássico.
Stack (pilha) é a região de memória que guarda variáveis locais (tipos primitivos e referências a objetos) e o estado de cada chamada de método. A referência sb está na stack, mas o objeto apontado por ela está no heap. A questão pergunta onde fica a instância de sb, não a referência – portanto, stack está errada.
Swap não é uma área de memória da JVM. É um mecanismo do sistema operacional que utiliza o disco como extensão da memória RAM (memória virtual). A JVM não armazena objetos diretamente em swap; ela aloca no heap, e o SO pode eventualmente paginar partes da memória para swap, mas isso é transparente para a aplicação Java. Portanto, não é o local de armazenamento direto.
Sweep é uma fase do algoritmo de Garbage Collector (coletor de lixo), conhecida como "varredura" ou "sweep phase", na qual o GC identifica e libera objetos não referenciados. Não é uma área de memória, e sim uma etapa de um processo. A instância sb é alocada no heap, e o sweep pode agir sobre ela posteriormente, mas não é o local de armazenamento.
Resumo das áreas de memória da JVM:
Área | O que armazena |
|---|---|
Heap | Todos os objetos e arrays criados com |
Stack | Variáveis locais (primitivos e referências), frames de método. |
Metaspace (antes PermGen) | Metadados de classe, pools de constantes, strings internadas. |
Code Cache | Código compilado JIT. |
Swap (SO) | Mecanismo de memória virtual, não faz parte da JVM. |
Na prova, leia com atenção o que a questão pede: "instância" = objeto = heap; "referência" = variável = stack (quando variável local). Esse é o ponto mais cobrado sobre memória Java.
Gabarito: letra A (Heap).
Link permanente: /questoes/qq896824