memória de pilha java detalhada

Java a memória é dividida em dois, um chamado de memória de pilha, a memória chamada pilha

Definido na função de alguns tipos básicos de variáveis e variáveis de referência de objeto são alocados na função de memória de pilha . Quando uma variável é definida em um bloco de código, java alocado para esta variável no espaço de memória stack, quando se supera o escopo de variáveis, java espaço de memória liberada automaticamente alocado para a variável, o espaço de memória pode ser imediatamente para outros fins.

memória heap usado para armazenar objetos e matrizes criadas pela nova nova . Na memória alocada no heap, java máquina virtual gerenciado pelo coletor de lixo automática. Após a pilha é gerada uma matriz ou um objecto também pode definir uma variável em particular na pilha, o valor dessa variável é igual para o primeiro endereço de uma matriz ou de um objecto na memória da pilha, esta variável particular está na pilha torna-se uma referência para a matriz variável ou objeto, já que você pode usar as variáveis de referência de memória pilha no programa para acessar as variáveis de matriz pilha ou de referência objeto é equivalente a um alias de uma matriz ou objeto, ou código.

variáveis de referência são variáveis comuns, a definição de memória alocada na pilha, variáveis de referência para executar fora do programa de liberação de escopo. & Objeto em si e a matriz alocada na pilha, mesmo fora do programa continua a usar a nova frase é gerado ea localização do código objeto matrizes de blocos, matrizes e memória heap ocupado pelo objeto em si não é liberado, array e objeto sem pontos variável de referência é quando entramos em uma lata de lixo não pode mais ser usado, mas a memória ainda está ocupada, num período subsequente de incerteza é libertado coletor de lixo. Esta é a principal razão comparação java de memória total,Na verdade, a variável de pilha para apontar para variáveis ​​de memória heap, que é um ponteiro em Java! 


Em java comparar estratégia de alocação de memória eo heap e pilha

  estratégia de alocação de memória de 1

  de acordo com a teoria vista do compilador, o programa de alocação de memória está sendo executado, há três estratégias, a saber, estático, pilha de estilo, e estilo heap.

   Alocação de armazenamento estático meios pode determinar os requisitos de espaço de armazenamento para cada objeto de dados em tempo de execução em tempo de compilação, para que possa alocar um espaço de memória fixa para eles em tempo de compilação. esta estratégia de alocação requer código do aplicativo não permite que estruturas de dados variáveis (como pode ser existem variáveis grupo), ou não permitir estrutura recursiva aninhada ocorre, uma vez que vai levar para o compilador não pode calcular com precisão os requisitos de espaço de armazenamento.

  alocação de memória de alocação dinâmica de armazenamento pilha pode também ser referido, é uma pilha de semelhante . e memória estática pilha alocação oposto runtime para alcançar, no programa de armazenamento de pilha, as necessidades do programa para a área de dados em tempo de compilação é completamente desconhecido, apenas para executar quando é capaz de saber, mas a lei, digite um em operação quando o módulo de programa, o programa deve saber o tamanho da área de dados módulo necessário para ser capaz de alocar memória para. nossa estrutura de dados conhecida Como a pilha, o armazenamento de pilha alocados de acordo com o princípio da última-out para distribuição.

  requisitos estáticos de alocação de armazenamento em tempo de compilação para conhecer os requisitos de armazenamento de todas as variáveis, as exigências de alocação de armazenamento pilha deve estar ciente de todos os requisitos de armazenamento no processo de entrada, enquanto o módulo de alocação de armazenamento pilha é responsável pela entrada em tempo de compilação ou tempo de execução Não é possível determinar a estrutura dos requisitos de armazenamento de dados de alocação de memória, tais como cadeias de comprimento variável e instâncias de objectos. montão pode utilizar um grande bloco ou blocos livres, a memória da pilha pode ser atribuído e libertado em qualquer ordem.

  pilha comparativo 2 e montão

  o resumo acima da definição vem da teoria do compilador livro, além de alocação de memória estática, parece tão maçante e difícil de entender, deixando de lado o seguinte alocação de memória estática e centralizado comparar pilha e pilha:

  a função eo papel da pilha e pilha para populares comparação, a pilha é usado principalmente para armazenar objetos, a pilha é usada principalmente para executar o programa e este por sua vez, foi principalmente devido às diferentes características do heap e pilha a decisão:

  Na programação, como C / C ++, todas as chamadas de método são realizadas pela pilha, todas as variáveis locais, os parâmetros estão na forma de memória alocada da pilha. Na verdade, não uma distribuição, mas se usado na linha do topo da pilha, assim como a correia transportadora de fábrica (correia transportadora), como, Stack Pointer irá guiá-lhe automaticamente para colocá-lo na posição, você tem que fazer é colocar algo para baixo na linha. quando a função de saída, você pode modificar o conteúdo da destruição pilha ponteiro de pilha. tal padrão mais rápido, é claro, usada para executar o programa. deve-se notar que, no momento da distribuição, como um programa de soon-to-call quando o módulo é atribuída uma área de dados, você deve saber com antecedência o tamanho da área de dados, também disse que, embora a alocação é feita no programa está funcionando, mas a distribuição de tamanho é determinado por quanto, imutável, eo "quanto size" é determinado em tempo de compilação, não em tempo de execução.

  pilha quando o aplicativo é executado no pedido do sistema operacional para alocar sua própria memória, porque a alocação de memória da administração do sistema operacional, por isso, a alocação e destruição deve ocupar o tempo, assim que usar o heap eficiência é muito baixa, mas a vantagem é que a pilha, o compilador não tem que saber quanto espaço de armazenamento é alocado a partir da pilha, você não sabe o armazenamento de dados deve ficar na pilha longa Tempo, portanto, vai ter uma maior flexibilidade ao usar armazenamento no heap. Na verdade, o polimorfismo orientada a objeto, alocação de memória heap é essencial, porque o espaço de armazenamento variável multi-estado exigido apenas em tempo de execução pode ser determinada após o objeto é criado em C ++, que é necessário para criar um objeto, única novos comandos necessários relacionados com a preparação do código. Quando esse código é executado, ele será automaticamente salvar os dados em um montão, é claro, para alcançar esta flexibilidade irá inevitavelmente pagar um preço :! Heap ao alocar espaço de armazenamento vai passar um longo período de tempo, que é a nós apenas dissemos leva a razões de baixa eficiência, parece que o camarada Lênin que as boas, as pessoas são muitas vezes as vantagens de falhas humanas, falhas muitas vezes a pessoa que benefícios (halo ~).

  o 3 JVM heap e pilha

  da JVM é cada thread recém-criado é atribuída uma pilha máquina .JVM virtual baseado em pilha é. Ou seja, para um programa Java, que é executado através da operação da pilha para ser concluído. unidades de pilha de quadros salvos estado do segmento. pilhas JVM de apenas duas operações: uma unidade de estrutura de empurrar e operações de POP.

  Sabemos que o método é chamado de um thread está sendo executado o método atual de esta discussão. Podemos não saber, quadro chamado o método atual utilizado no quadro atual. Quando o segmento ativar um método Java, JVM vai ser empurrado para um novo quadro no interior da pilha Java do segmento. O quadro se tornará naturalmente o quadro atual. Durante a execução deste método, este quadro será usado para salvar os parâmetros, variáveis locais, cálculos intermédios e outros dados. Aqui o conceito e os princípios da atividade compilou um registro de este quadro é o mesmo.

  De ponto de vista do presente mecanismo de distribuição Java, a pilha pode ser entendida como sendo uma pilha (pilha) é um sistema operativo no estabelecimento de um processo ou de fios (fio de vários segmentos de suporte de sistema operativo) a área de armazenagem criado por esta discussão, esta região tem uma característica, passado-out.

  Cada aplicativos Java únicas para uma ocorrência de JVM, cada instância é exclusivo para um montão. Todos instância de classe ou uma variedade de aplicações na operação são criados na pilha por todos os threads da aplicação share. Com C / C ++ é diferente na memória Java heap é alocado automaticamente inicializado. Java, espaço de armazenamento para todos os objetos são alocados na pilha, mas o objeto de referência é alocado na pilha, que é alocada memória de dois lugares no estabelecimento de um objeto, a memória real alocado no heap o estabelecimento deste objeto, alocado no heap memória de pilha é apenas um ponteiro para somente o objeto (de referência).

  Java heap e pilha em

  Java a memória é dividida em duas: uma é a memória de pilha, um é a memória heap.

  Variáveis referem-se a variáveis e objetos do tipo definido nas funções básicas são alocados para a função de memória de pilha.

  Ao definir um bloco variável do código, pilha Java é alocado no espaço de memória variável, quando se supera o escopo de variáveis, Java espaço de memória liberada automaticamente alocado para a variável, o espaço de memória pode ser imediatamente para outros fins.

  memória heap usado para armazenar objetos e matrizes criadas pela nova.

  Na memória alocada na pilha, gerenciado pelo coletor de lixo automática máquina virtual Java.

  Depois do produto montão um array ou objeto, você também pode definir uma variável especial na pilha, a pilha de modo que o valor dessa variável é igual ao primeiro endereço da matriz ou objeto na memória heap, variável de pilha tornou-se uma matriz ou de referência de objecto variáveis.

  variável de referência é equivalente a um nome da matriz ou objeto, desde que você pode acessar a matriz ou referência de objeto variáveis heap usando a pilha no programa.

  Especificamente:

  pilha e pilha é onde Java é usado para armazenar dados na RAM. Ao contrário de C ++, Java gerir automaticamente a pilha e heap, o programador não é possível definir diretamente a pilha ou heap.

  montão A Java é a área de dados do tempo de execução, o espaço de classe (objeto dispensar esses objetos, estabelecendo novo, newArray, anewarray multianewarray e outras instruções, código de programa, eles não precisam explicitamente liberar. coleta de lixo Heap é responsável pela o monte é a vantagem de tamanho da memória alocada dinamicamente, a sobrevivência não tem que dizer ao compilador com antecedência, porque a alocação dinâmica de memória, coletor de lixo do Java automaticamente levado embora esses dados já não é usado em tempo de execução. mas a desvantagem é que, devido à alocação dinâmica de acesso à memória mais lento durante a execução.

  vantagem da pilha é acessado mais rápido do reator, após registo, os dados de pilha podem ser compartilhados, mas a desvantagem é que não há dados na pilha tamanho e sobrevivência deve ser determinada, a falta de flexibilidade. o amontoado de divisórias principal para armazenar alguns tipos básicos de variáveis (, int, curtas, longas, de bytes, flutuador, duplo, booleano, carvão animal) e pega objecto.

  pilha tem um muito importante particularidade, os dados estão presentes na pilha pode simultaneamente partes Suponhamos que definem :.

  int 3 = a;.

  . int 3 = B;

  O primeiro negócio compilador com int a = 3; primeiro ele irá criar uma variável como uma referência na pilha e, em seguida, descobrir se há um valor 3 pilha, se não for encontrado, ele virá na loja 3, em seguida, um ponto 3. Seguido por tratamento int b = 3; b Depois de criar a variável de referência, uma vez que tem o valor de 3 na pilha, directamente para colocar b 3. Assim, tem havido casos a e b simultaneamente ponto a 3. Neste momento, se fizermos um = 4; em seguida, o compilador irá procurar novamente se existem 4 pilha de valores, e se não, então o 4 armazenados e fazer um ponto a 4; Se você já tem, então este endereço diretamente a um ponto . Assim, uma alteração não afecta o valor do valor b. Esta partilha é para ser observado com referência a dois objectos de dados simultânea para um objecto tal partilha é diferente, porque uma tal situação não afecta a modificação B, isto é feito pelo compilador, facilita economizar espaço. E um variáveis ​​de referência objeto modificar o estado interno do objeto afetará mais variáveis ​​de referência de objeto 

Publicado 40 artigos originais · ganhou elogios 19 · vê 60000 +

Acho que você gosta

Origin blog.csdn.net/u010090644/article/details/49075143
Recomendado
Clasificación