Alocação de memória em Java: tudo o que você precisa saber em 2022

Publicados: 2021-01-10

Alocação de memória em java refere-se ao processo onde os programas e serviços de computador são alocados dedicados a espaços de memória virtual. A Java Virtual Machine divide a memória em Stack e Heap Memory. Para Java Virtual Machine, a execução de um aplicativo em seu potencial máximo pode acontecer a partir da pilha e da memória heap. Cada vez que uma nova variável ou objeto é declarado, a memória aloca memória dedicada a tais operações.

Índice

Memória de pilha

A alocação de memória de estoque em java é usada para memória estática e execução de thread. Os valores contidos nesta memória são temporários e limitados a métodos específicos, pois continuam sendo referenciados no modo Last-In-First-Out.

Assim que a memória é chamada e um novo bloco é criado na memória da pilha, a memória da pilha mantém valores primitivos e referências até que o método dure. Após o seu término, o bloco é liberado e fica disponível para que um novo processo ocorra. Em geral, o tamanho geral da memória de pilha é insignificante para a memória de heap.

Aprenda a criar aplicativos como Swiggy, Quora, IMDB e muito mais

Características da memória de pilha

Com base nas diferentes seções da alocação de memória na Java Virtual Machine (JVM) , aqui estão alguns dos recursos discretos da memória de pilha:

  • A memória da pilha pode crescer ou contrair à medida que novos métodos são chamados e retornados de acordo.
  • Qualquer variável na pilha pode ser executada enquanto o escopo do método existir.
  • Ele obtém auto-alocação e desalocação à medida que um método é executado.
  • No caso de memória cheia, o java.lang.StackOverFlowError é acionado.
  • É mais rápido no acesso quando comparado à memória heap.

Leia: Full-Stack vs. Engenheiro de Software: Qual deles você deve escolher?

Métodos usados ​​na alocação de memória da pilha em java

  • Object push(Object element): Aqui, um item é empurrado para o topo da pilha.
  • Object pop(): Qualquer elemento localizado no topo da pilha é liberado e retornado. No caso de uma pilha ficar vazia quando pop() é invocado, ocorre a exceção – EmptyStackException.
  • Object peek(): Aqui, o elemento superior é retornado, mas não é submetido à liberação.
  • Boolean empty(): Se o loop não tiver nenhum valor superior em sua pilha, a função retornará 1 (true), caso contrário, 0 (false).
  • In search(Object element): É usado para entender se um objeto está presente na pilha. Caso o valor seja encontrado, a função retorna a localização do elemento do topo da pilha, caso contrário retorna -1.

Leia: Projetos e tópicos Java para iniciantes

Espaço de pilha Java

Usado principalmente pelo java runtime, o Java Heap Space entra em ação toda vez que um objeto é criado e alocado nele. A função discreta, como Garbage Collection, continua liberando a memória usada pelos objetos anteriores que não possuem referência. Pois um objeto criado no Heap Space pode ter acesso livre em toda a aplicação.

A alocação de memória em java é dividida em partes, a saber, Heap, Stack, Code e Static.

Características da Memória Heap Java

  • Acessível a partir da complicada técnica de gerenciamento de memória, incluindo a geração jovem, a geração antiga ou permanente e a geração permanente.
  • Na memória heap, quando fica cheia, retorna java.lang.OutOfMemoryError.
  • O acesso nesta memória é comparativamente mais lento que o da memória de pilha.
  • Ele não sofre desalocação automática e requer uma função semelhante como o Garbage Collector para remover objetos estranhos para que a memória funcione em seu estágio ideal.

Um exemplo da alocação de memória de pilha e heap em java é:

Fonte

Espaço de pilha e memória de pilha: diferenças fundamentais

Memória de espaço de pilha Memória de pilha
Todas as partes do aplicativo invocam a memória heap. A execução da memória da pilha é limitada a um único thread.
Sempre que um objeto é criado, ele é armazenado no espaço de heap. A memória da pilha compreende apenas suas variáveis ​​primitivas de referência e locais.
Os objetos aqui são acessíveis globalmente em todo o aplicativo. Outros encadeamentos não podem acessar objetos de memória de pilha.
Aqui, a memória é definida de acordo com as gerações jovens e velhas. O gerenciamento de memória ocorre em uma base Last-In-First-Out.
A memória permanece conforme o escopo do aplicativo. A memória é temporária.
Os métodos como – XMX e XMS JVM são usados ​​para definir o tamanho ideal da memória heap. Para memória de pilha, ela é determinada pelo método -XSS.
Aqui, a exceção de java.lang.OutOfMemoryError ocorre no caso de memória cheia. Aqui, o erro java.lang.StackOverFlowError acontece caso a memória esteja cheia.
O tamanho é maior, mas leva tempo para processar em comparação com a memória da pilha. O tamanho é menor, mas mais rápido na execução para sua operação LIFO suave.

Leia também: Salário de desenvolvedor Java na Índia

Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Conclusão

A alocação de memória em java ocorre de duas maneiras, principalmente, espaço de pilha e heap. Esperamos ter ajudado você a entender o processo de tudo isso.

Se você estiver interessado em aprender mais sobre desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos, e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Como o gerenciamento de memória acontece em Java?

Java Virtual Machine (JVM) é um programa de computador usado para executar programas escritos em linguagem de programação Java. Isso torna o processo de uso do gerenciamento de memória eficiente. Além disso, ele foi projetado para ser robusto, de modo que, mesmo que haja uma falha no sistema operacional, o programa em execução na JVM não seja afetado. Gerenciamento de memória significa gerenciar cada pedaço de memória (RAM) em um sistema de computador. A JVM monitora a alocação e liberação de memória quando necessário. Assim que um programa é carregado na memória, a JVM aloca espaço de memória para ele. Esse processo é chamado de heap. O heap é um espaço de memória comum para muitas partes do aplicativo.

O que é a coleta de lixo em Java?

A Java Virtual Machine (JVM) usa a contagem de referência para rastrear o número de objetos Java. Antes que qualquer objeto possa ser coletado, o número de referências a esse objeto deve chegar a zero. O programa do usuário pode excluir objetos explicitamente chamando o método finalize(). Finalize é um método estático na classe Object que é chamado pelo Garbage Collector (GC). O método Finalize liberará todos os recursos do objeto antes que o Garbage Collector cuide desse objeto. Coletor de lixo é o processo de limpeza de objetos indesejados. O processo do Garbage Collector será acionado quando o sistema de tempo de execução Java detectar que o heap Java está quase cheio. Cada objeto tem um bitmap na JVM. O bitmap é definido para cada objeto para rastrear se foi usado ou não. Quando o bitmap é girado para 0, o GC cuidará desse objeto.

Quais são as características da linguagem de programação Java?

Java Programming Language é uma linguagem de programação de alto nível de propósito geral que é usada para construir aplicativos e applets. O software Java pode ser executado em qualquer plataforma que suporte Java sem ser reprogramado. Os recursos da linguagem de programação Java são: recursos orientados a objetos, robustos, de alta segurança e independentes de plataforma, gratuitos, fáceis de aprender e usar. Java é uma linguagem de programação orientada a objetos que é independente de plataforma e também pode ser usada em qualquer sistema operacional ou plataforma. Java é uma linguagem compilada e é produzido bytecode que é então executado na Java Virtual Machine.