Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Pilha e Heap Java:Tutorial de Alocação de Memória Java

O que é memória de pilha?


Stack em java é uma seção de memória que contém métodos, variáveis ​​locais e variáveis ​​de referência. A memória de pilha é sempre referenciada na ordem Last-In-First-Out. As variáveis ​​locais são criadas na pilha.

O que é memória heap?


Heap é uma seção de memória que contém objetos e também pode conter variáveis ​​de referência. As variáveis ​​de instância são criadas no heap

Alocação de memória em Java


Alocação de memória em Java é o processo no qual as seções de memória virtual são reservadas em um programa para armazenar as variáveis ​​e instâncias de estruturas e classes. No entanto, a memória não é alocada a um objeto na declaração, mas apenas uma referência é criada. Para a alocação de memória do objeto, o método new() é usado, de modo que o objeto sempre recebe memória alocada no heap.

A alocação de memória Java é dividida nas seguintes seções:
  1. Pilha
  2. Pilha
  3. Código
  4. Estático

Essa divisão de memória é necessária para seu gerenciamento eficaz.

Diferença entre variável local e de instância


Variável de instância é declarado dentro de uma classe, mas não dentro de um método
class Student{ 
int num; // num is  instance variable 
public void showData{}

Variável local são declarados dentro de um método incluindo método argumentos .
public void sum(int a){

int x = int a +  3;

// a , x are local variables;

}

Diferença entre pilha e pilha


Clique aqui se o vídeo não estiver acessível


Vamos dar um exemplo para entender isso melhor.

Considere que seu método principal está chamando o método m1

public void m1{
int x=20
}

Na pilha java, um frame será criado a partir do método m1.



A variável X em m1 também será criada no quadro para m1 na pilha. (Veja imagem abaixo).



O método m1 está chamando o método m2. Na pilha java, um novo quadro é criado para m2 no topo do quadro m1.




As variáveis ​​b e c também serão criadas em um quadro m2 em uma pilha.

public void m2(int b){
boolean c;
}



O mesmo método m2 está chamando o método m3. Novamente um quadro m3 é criado no topo da pilha (veja a imagem abaixo).




Agora digamos que nosso método m3 está criando um objeto para a classe “Account”, que tem duas instâncias variáveis ​​int p e int q.

Account {
             Int p;
             Int q;
       }

Aqui está o código para o método m3
public void m3(){
	Account ref = new Account();
	// more code
}

A instrução new Account() criará um objeto de conta no heap.



A variável de referência “ref” será criada em uma pilha java.



O operador de atribuição “=" fará uma variável de referência para apontar para o objeto no Heap.



Uma vez que o método tenha concluído sua execução. O fluxo de controle retornará ao método de chamada. Que neste caso é o método m2.



A pilha do método m3 será liberada.



Como a variável de referência não estará mais apontando para o objeto no heap, ela será elegível para coleta de lixo.



Uma vez que o método m2 tenha concluído sua execução. Ele será retirado da pilha e todas as suas variáveis ​​serão liberadas e não estarão mais disponíveis para uso.

Da mesma forma para o método m1.

Eventualmente, o fluxo de controle retornará ao ponto inicial do programa. Que geralmente é o método “principal”.

E se Object tiver uma referência como variável de instância?

public static void main(String args[]) {
  A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d;  //more code }

Neste caso, a variável de referência “filho” será criada no heap, que por sua vez estará apontando para o seu objeto, algo como o diagrama mostrado abaixo.



Resumo:


Java

  1. Variáveis ​​e literais Java
  2. Classe e objetos Java
  3. Classe abstrata Java e métodos abstratos
  4. Java aninhado e classe interna
  5. Java joga e joga
  6. Tipos de anotação Java
  7. Autoboxing e unboxing Java
  8. Java String replace(), replaceAll() e método replaceFirst()
  9. Java - substituindo
  10. Java 10 - Alocação de heap