Prefácio
Escrevi um artigo sobre a Divisão da Área de Memória da JVM, mas ontem recebi uma entrevista com a Ant Financial. Perguntei sobre o conteúdo relacionado à JVM e expliquei a divisão da área de memória da JVM. Essa parte foi muito boa, mas depois perguntei onde a corda é armazenada em Java. Lembrei -me apenas de que a corda é uma quantidade inalterada, que deve ser armazenada no pool constante. Mais tarde, porém, perguntei onde a nova string deveria ser colocada, que deve ser colocada na pilha. Mais tarde, perguntei onde as referências de string foram colocadas. Naquela época, eu era tolo e disse que eles também foram colocados na pilha. Agora, resumirei: dados de variáveis e referências de objetos do tipo básico são colocados na pilha, o próprio objeto é colocado na pilha, constantes explícitas de string são colocadas no pool constante e os objetos de string são colocados na pilha.
Descrição do pool constante
O pool constante foi colocado anteriormente na área do método, ou seja, estava na geração permanente e movido para a pilha a partir do JDK7. Essa alteração pode ser vista a partir das ** RFEs importantes abordadas nas notas JDK 7 na versão de lançamento do Oracle.
Área: HotSpotsynopsis: No JDK 7, as seqüências internas não são mais alocadas na geração permanente da pilha de Java, mas são alocadas na parte principal da pilha Java (conhecida como gerações jovens e antigas), juntamente com os outros objetos criados pelo aplicativo. Essa alteração resultará em mais dados que residem na pilha Java principal e menos dados na geração permanente e, portanto, podem exigir que os tamanhos de heap sejam ajustados. A maioria das aplicações verá apenas diferenças relativamente pequenas no uso da pilha devido a essa mudança, mas aplicativos maiores que carregam muitas classes ou fazem uso pesado do método String.intern () verá diferenças mais significativas.RFE: 6962931
String Memory Location Descrição
1. Constantes explícitas de cordas
String a = "holten"; string b = "holten";
• Após a primeira frase, um objeto de string com o valor que Holten é criado no pool constante;
• Quando a segunda frase é executada, porque há um Holten no pool constante, um novo objeto de string não é mais criado.
• Neste momento, a referência à string está na pilha da máquina virtual.
1. Objeto de cordas
String a = new string ("holtenobj"); string b = new string ("holtenobj");• Quando a classe é carregada, um objeto String com o valor de Holtenobj é criado no pool constante. Quando a primeira frase é executada, um novo objeto String ("Holtenobj") será criado no heap;
• Quando a segunda frase é executada, porque o holtenobj existe no pool constante, um novo objeto de string não é mais criado e um novo objeto String ("Holtenobj") é criado diretamente no heap.
Verificar
/*** Criado por Holten.gao em 2016/8/16. */public class Main {public static void main (string [] args) {string str1 = "gao xiaotian"; String str2 = "gao xiaotian"; System.out.println (str1 == str2); // true string str3 = new string ("gao datian"); String str4 = new string ("gao datian"); System.out.println (str3 == str4); // false}}Resultado de retorno:
truefalse
O artigo acima é baseado na explicação detalhada dos locais de memória da string no Java. É todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.