O que é alocação de memória em Java? Memória de pilha e pilha



Este artigo baseado em 'Alocação de memória em Java' o ajudará com um conhecimento detalhado sobre a alocação de memória junto com as estruturas de dados Stack e Heap.

Alocação de memória é um processo pelo qual programas e serviços de computador são atribuídos com recursos físicos ou virtuais memória espaço. Neste artigo, aprenderemos sobre a alocação de memória em e discutiremos a memória de pilha e pilha.

O que é Stack Memory?

A memória Java Stack é usada para a execução de um thread. Eles contêm valores específicos do método de curta duração e referências a outros objetos no heap que está sendo referido a partir do método.





Pilha a memória é sempre referenciada em UEPS (último a entrar, primeiro a sair) ordem. Sempre que um método é invocado, um novo bloco é criado na memória da pilha para que o método mantenha os valores primitivos locais e faça referência a outros objetos no método.

Assim que o método termina, o bloco deixa de ser usado e fica disponível para o próximo método.



def __init__

O tamanho da memória de pilha é muito menor em comparação com a memória Heap.

Principais recursos da pilha de memória

Além do que discutimos até agora, a seguir estão alguns outros recursos do Pilha memória:

  • Ele aumenta e diminui à medida que novos métodos são chamados e retornados, respectivamente
  • As variáveis ​​dentro da pilha existem apenas enquanto o método que as criou estiver em execução
  • Está automaticamente alocado e desalocado quando o método termina a execução
  • Se esta memória estiver cheia, o Java lança java.lang.StackOverFlowError
  • O acesso a esta memória é velozes quando comparado com a memória heap
  • Esta memória é discussão segura já que cada thread opera em sua própria pilha

Métodos na classe Stack

  • Empurrar objeto ( Elemento de objeto ): Coloca um elemento no topo da pilha.
  • Pop de objeto (): Remove e retorna o elemento superior da pilha. A ‘EmptyStackException’ uma exceção é lançada se chamarmos pop () quando a pilha de chamada está vazia.
  • Objeto peek (): Retorna o elemento no topo da pilha, mas não o remove.
  • Booleano vazio (): Ele retorna verdadeiro se nada estiver no topo da pilha. Caso contrário, retorna falso.
  • busca interna ( Elemento de objeto ): Ele determina se um objeto existe na pilha. Se o elemento for encontrado, ele retorna a posição do elemento do topo da pilha. Caso contrário, ele retorna -1.

Código Java para implementação de pilha

import java.io. * import java.util. * class Teste {static void stack_push (Stack stack) {for (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

//Resultado



memory-allocation-in-java

Agora, vamos passar para o Heap Space.

Heap Space em Java

A memória é alocada durante a execução de instruções escritas por programadores. Observe que o nome heap não tem nada a ver com a estrutura de dados heap. É chamado de heap porque é uma pilha de espaço de memória disponível para os programadores alocado e desalocar. Se um programador não lida bem com essa memória, um vazamento de memória podeacontecer no programa.

Principais recursos do Java Heap Memory

  • Além do que discutimos até agora, a seguir estão alguns outros recursos do espaço de heap:
  • É acessado por meio de técnicas complexas de gerenciamento de memória que incluem Geração jovem, velha ou Geração Tenured, e Geração Permanente
  • Se o espaço de heap estiver cheio, o Java lança java.lang.OutOfMemoryError
  • O acesso a esta memória é relativamente mais lento do que a memória da pilha
  • Essa memória, em contraste com a pilha, não é desalocada automaticamente. Precisa Coletor de lixo para liberar objetos não utilizados, de modo a manter a eficiência do uso de memória
  • Ao contrário da pilha, um heap não é discussão segura e precisa ser protegido por meio da sincronização adequada do código

Diferença entre Java Heap Space e Stack Memory

Com base nas explicações acima, podemos facilmente concluir as seguintes diferenças entre Heap e Pilha memória.

  • Heap a memória é usada por todas as partes do aplicativo, enquanto a memória da pilha é usada apenas por um thread de execução.
  • Sempre que um objeto é criado, ele é sempre armazenado no espaço Heap e a memória da pilha contém a referência a ele. A pilha de memória contém apenas variáveis ​​primitivas locais e variáveis ​​de referência para objetos no espaço de heap.
  • Os objetos armazenados no heap são globalmente acessíveis, enquanto a memória da pilha não pode ser acessada por outros threads.
  • O gerenciamento de memória na pilha é feito em um UEPS maneira, ao passo que é mais complexo na memória Heap porque é usado globalmente. A memória heap é dividida em Geração jovem, velha geração etc, mais detalhes em Java Garbage Collection.
  • Memória de pilha é de curta duração enquanto a memória heap vive do início até o final da execução do aplicativo.
  • Podemos usar -XMX e -XMS Opção JVM para definir o tamanho de inicialização e o tamanho máximo da memória heap. Podemos usar -XSS para definir o tamanho da memória da pilha.
  • Quando a memória da pilha está cheia, o Java runtime lança java.lang.StackOverFlowError ao passo que se a memória heap estiver cheia, ele lança java.lang.OutOfMemoryError: Java Heap Spaceerro.
  • O tamanho da memória de pilha é muito menor quando comparado à memória Heap. Por causa da simplicidade na alocação de memória (UEPS), a memória da pilha é muito rápida quando comparada commemória heap.

Gráfico de comparação

PARÂMETRO PILHA HEAP
Básico A memória é alocada em um bloco contíguoA memória é alocada em uma ordem aleatória
Alocação e desalocação Automático por compiladorManual do Programador
Custo MenosMais
Implementação DifícilFácil
Tempo de acesso Mais rápidoMais devagar
Problema principal Falta de memóriaFragmentação de Memória
Localidade de diferença ExcelenteAdequado
Flexibilidade Taxa fixaO redimensionamento é possível

Com isso, chegamos ao final deste tutorial “Alocação de Memória em Java”. Espero que você tenha entendido o conceito e sua implementação por meio de alguns exemplos em tempo real.

Agora que você entendeuAlocação de memória em Javanoções básicas por meio deste artigo “Alocação de memória em Java” confira o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. Os cursos de treinamento e certificação Java J2EE e SOA da Edureka são projetados para estudantes e profissionais que desejam ser um desenvolvedor Java. O curso foi desenvolvido para dar a você uma vantagem na programação Java e treiná-lo para os conceitos básicos e avançados de Java, juntamente com vários frameworks Java como Hibernate Primavera .

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog “Memory Allocation in Java” e entraremos em contato com você o mais breve possível.