Lorsqu'ils mentionnent la mémoire en Java, beaucoup de gens penseront à JVM. Le modèle de mémoire évoqué dans cet article sera également mal compris. En fait, c'est aussi un point de test qui est plus susceptible de commettre des erreurs lors de l'entretien. L'abréviation du modèle de mémoire est jmm, je pense qu'il ne sera pas facilement confondu s'il est affiché dans les noms anglais. Ci-dessous, nous expliquerons le concept de modèle de mémoire Java et vous aiderons à le distinguer de JVM.
1. Concept
Le modèle de mémoire Java (Java Main Memory, JMM en abrégé) est un concept abstrait et présente de nombreuses similitudes avec le modèle de mémoire informatique. JMM comprend principalement des threads, de la mémoire de travail et de la mémoire principale pour interagir. La mémoire de travail peut être comparée au cache de calcul, mais la mémoire de travail entre les threads est indépendante les unes des autres, la mémoire principale est similaire à la mémoire principale de l'ordinateur. , et le transfert de valeurs variables entre les threads se fait principalement via la mémoire principale. Dans le même temps, JMM dispose également d'une réorganisation des instructions pour optimiser l'ordre d'exécution du code. En termes simples, l'ordre dans lequel le code est écrit n'est pas nécessairement l'ordre dans lequel le code est exécuté.
2. La différence entre JMM et JVM
Le modèle de mémoire Java ressemble à la structure de mémoire Java (structure de mémoire JVM). De nombreuses personnes pensent à tort que les deux sont la même chose, ce qui conduit souvent à des réponses incorrectes lors du processus d'entretien.
Le tas Java et la zone de méthode sont des zones de données partagées par plusieurs threads. En d’autres termes, plusieurs threads peuvent être capables d’opérer sur les mêmes données stockées dans la zone de segment ou de méthode. C'est ce que nous appelons souvent « les threads Java communiquent via la mémoire partagée ».
Le modèle de mémoire Java est traduit de l'anglais Java Memory Model (JMM). En fait, JMM n’existe pas aussi réellement que la structure de mémoire JVM. C'est juste un concept abstrait. JSR-133 : Modèle de mémoire Java et spécification de thread décrit que JMM est lié au multithreading. Il décrit un ensemble de règles ou de spécifications qui définissent que lorsqu'un thread écrit dans une variable partagée, il est visible par un autre thread. .
Donc, pour résumer brièvement, les multithreads de Java communiquent via la mémoire partagée, et en raison de l'utilisation de la mémoire partagée pour la communication, il y aura une série de problèmes tels que la visibilité, l'atomicité, l'ordre, etc. pendant le processus de communication, et JMM Il s'agit d'un modèle construit autour d'une communication multithread et d'une série de fonctionnalités qui y sont liées. JMM définit certains ensembles de syntaxe, qui sont mappés à des mots-clés tels que volatile et synchronisé dans le langage Java.
Ce qui précède est une introduction au modèle de mémoire en Java.Cet article se concentre sur le partage de la théorie de base. Vous pouvez vous concentrer sur la distinction entre jmm et jvm, et vous pourrez être plus clair sur ces deux concepts lors de vos études futures .