Al mencionar la memoria en Java, muchas personas pensarán en JVM. El modelo de memoria discutido en este artículo también se malinterpretará de esta manera. De hecho, este también es un punto de prueba en el que es más probable que se cometan errores en la entrevista. La abreviatura del modelo de memoria es jmm. Creo que no se confundirá fácilmente si se muestra en nombres en inglés. A continuación explicaremos el concepto de modelo de memoria Java y le ayudaremos a distinguirlo de jvm.
1. Concepto
El modelo de memoria Java (memoria principal de Java, JMM para abreviar) es un concepto abstracto y tiene muchas similitudes con el modelo de memoria de la computadora. JMM incluye principalmente subprocesos, memoria de trabajo y memoria principal para interactuar. La memoria de trabajo se puede comparar con el caché de cálculo, pero la memoria de trabajo entre subprocesos es independiente entre sí y la memoria principal es similar a la memoria principal de la computadora; Y la transferencia de valores variables entre subprocesos se realiza principalmente a través de la memoria principal. Al mismo tiempo, JMM también tiene reordenamiento de instrucciones para optimizar el orden de ejecución del código. En pocas palabras, el orden en que se escribe el código no es necesariamente el orden en que se ejecuta el código.
2. La diferencia entre JMM y JVM
El modelo de memoria de Java es similar a la estructura de memoria de Java (estructura de memoria JVM). Mucha gente piensa erróneamente que los dos son lo mismo, lo que a menudo conduce a respuestas incorrectas durante el proceso de entrevista.
El montón de Java y el área de métodos son áreas de datos compartidas por varios subprocesos. En otras palabras, es posible que varios subprocesos puedan operar con los mismos datos almacenados en el montón o área de método. Esto es lo que solemos llamar "los subprocesos de Java se comunican a través de la memoria compartida".
El modelo de memoria Java está traducido del modelo de memoria Java inglés (JMM). De hecho, JMM no existe tan real como la estructura de memoria JVM. Es sólo un concepto abstracto. JSR-133: Modelo de memoria Java y especificación de subprocesos describe que JMM está relacionado con subprocesos múltiples. Describe un conjunto de reglas o especificaciones. Esta especificación define que cuando un subproceso escribe en una variable compartida, es visible para otro subproceso. .
Entonces, para resumir brevemente, los subprocesos múltiples de Java se comunican a través de la memoria compartida y, debido al uso de la memoria compartida para la comunicación, habrá una serie de problemas como visibilidad, atomicidad, orden, etc. durante el proceso de comunicación, y JMM Es un modelo construido en torno a la comunicación multiproceso y una serie de características relacionadas con ella. JMM define algunos conjuntos de sintaxis, que se asignan a palabras clave como volátil y sincronizado en el lenguaje Java.
Lo anterior es una introducción al modelo de memoria en Java. Este artículo se centra en compartir la teoría básica. Puede centrarse en distinguir jmm y jvm, y podrá tener más claro estos dos conceptos cuando estudie en el futuro .