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
- Principais recursos da pilha de memória
- Métodos na classe Stack
- Código Java para implementação de pilha
- Heap Space em Java
- Principais recursos da memória heap
- Diferença entre Java Heap Space e Stack Memory
- Gráfico de comparação
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
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íguo | A memória é alocada em uma ordem aleatória |
Alocação e desalocação | Automático por compilador | Manual do Programador |
Custo | Menos | Mais |
Implementação | Difícil | Fácil |
Tempo de acesso | Mais rápido | Mais devagar |
Problema principal | Falta de memória | Fragmentação de Memória |
Localidade de diferença | Excelente | Adequado |
Flexibilidade | Taxa fixa | O 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.