Ao mencionar memória em Java, muitas pessoas pensarão em JVM. O modelo de memória discutido neste artigo também será mal interpretado como este. Na verdade, este também é um ponto de teste com maior probabilidade de cometer erros na entrevista. A abreviatura do modelo de memória é jmm, acredito que não será facilmente confundido se for exibido em nomes em inglês. A seguir explicaremos o conceito de modelo de memória Java e ajudaremos você a distingui-lo do jvm.
1. Conceito
O modelo de memória Java (Java Main Memory, abreviadamente JMM) é um conceito abstrato e tem muitas semelhanças com o modelo de memória do computador. JMM inclui principalmente threads, memória de trabalho e memória principal para interagir. A memória de trabalho pode ser comparada ao cache de cálculo, mas a memória de trabalho entre threads é independente uma da outra, a memória principal é semelhante à memória principal do computador; , e a transferência de valor variável entre threads é feita principalmente através da memória principal. Ao mesmo tempo, JMM também possui reordenação de instruções para otimizar a ordem de execução do código. Simplificando, a ordem em que o código é escrito não é necessariamente a ordem em que o código é executado.
2. A diferença entre JMM e JVM
O modelo de memória Java é semelhante à estrutura de memória Java (estrutura de memória JVM). Muitas pessoas pensam erroneamente que os dois são a mesma coisa, o que muitas vezes leva a respostas incorretas durante o processo de entrevista.
O heap Java e a área de método são áreas de dados compartilhadas por vários threads. Em outras palavras, vários threads podem operar nos mesmos dados armazenados no heap ou na área de método. Isso é o que costumamos chamar de "threads Java se comunicam por meio de memória compartilhada".
O modelo de memória Java é traduzido do inglês Java Memory Model (JMM). Na verdade, o JMM não existe tão real quanto a estrutura de memória da JVM. É apenas um conceito abstrato. JSR-133: Modelo de memória Java e especificação de thread descreve que JMM está relacionado a multithreading. Ele descreve um conjunto de regras ou especificações que quando um thread grava em uma variável compartilhada, ele fica visível para outro thread. .
Então, para resumir brevemente, os multithreads do Java se comunicam por meio de memória compartilhada e, devido ao uso de memória compartilhada para comunicação, haverá uma série de problemas como visibilidade, atomicidade, ordem, etc. durante o processo de comunicação, e JMM É um modelo construído em torno da comunicação multithread e de uma série de recursos relacionados a ela. JMM define alguns conjuntos de sintaxe, que são mapeados para palavras-chave como volátil e sincronizado na linguagem Java.
O texto acima é uma introdução ao modelo de memória em Java. Este artigo se concentra em compartilhar a teoria básica. Você pode se concentrar em distinguir jmm e jvm e pode ser mais claro sobre esses dois conceitos ao estudar no futuro .