Analise o seguinte trecho de código Java: StringBuilder sb ...
StringBuilder sb = new StringBuilder("Memória"); sb.append(" ocupada.");
Em qual local a JVM (Java Virtual Machine) armazenará a instância de sb?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - Heap
No contexto de programação Java, entender o gerenciamento de memória da JVM (Java Virtual Machine) é fundamental. Quando criamos objetos em Java, estes são armazenados na área de memória conhecida como Heap. A Heap é responsável por armazenar as instâncias dos objetos que são criados durante a execução do programa. Ela é diferente da Stack, que armazena as variáveis locais e os dados referentes à chamada dos métodos, e do PermGen (ou Metaspace a partir do Java 8), que armazena metadados das classes e outros artefatos relacionados ao carregamento de classes.
No trecho de código fornecido, StringBuilder sb = new StringBuilder("Memória");
cria uma instância de StringBuilder
com o conteúdo inicial "Memória". Ao usar new
, o Java aloca memória para o novo objeto StringBuilder na Heap, pois é onde os objetos são armazenados. O método append
é então chamado para adicionar a string " ocupada." ao objeto StringBuilder, modificando o estado deste objeto na Heap.
As demais opções não são locais apropriados para o armazenamento de instâncias de objetos no Java:
- Perm: Região de memória que era utilizada para armazenar metadados das classes, substituída pelo Metaspace em versões mais recentes do Java;
- Stack: Utilizada para armazenar frames de execução de métodos, variáveis locais e referências a objetos;
- Swap: É um espaço de armazenamento secundário usado pelo sistema operacional quando o RAM está cheio, não é um conceito diretamente gerenciado pela JVM;
- Sweep: Não é uma área de memória, mas se refere a uma operação de coleta de lixo onde objetos não mais referenciados são removidos da memória Heap.
Portanto, a alternativa correta é a A - Heap, pois é na Heap que objetos e instâncias, como o StringBuilder sb
, são armazenados na memória quando criados na linguagem Java.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A classe StringBuilder faz parte do pacote java.lang. Essa classe permite criar e manipular dados de Strings dinamicamente, ou seja, podem criar variáveis de String modificáveis.
Uma vantagem sobre a classe String é a concatenação de strings. Pois quando concatena strings com StringBuilder é invocado o método append. Esse método aloca novas strings concatenadas para o mesmo objeto, ou seja, cada vez que concatena strings não são criadas cópias dos objetos como é realizado pelo método concat da classe String, contribuindo para um melhor desempenho do sistema.
O espaço de heap é usado para a alocação dinâmica de memória de objetos Java e classes JRE no tempo de execução . Novos objetos são sempre criados no espaço heap e as referências a esses objetos são armazenadas na memória da pilha.
O heap é a área de dados de runtimea partir da qual a memória de todas as instâncias de classes e matrizes é alocada
Áreas de memórias da JVM:
Heap - armazena os objetos criados pela aplicação. Ex: objetos criados com new().
Perm - armazena interfaces, classes, métodos e atributos estáticos.
- JAVA 8 o PERM foi substituído pelo MetaSpace.
Pilha - Primitivos;
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo