La comprensión en profundidad del modelo de memoria de Java (x) - Resumen

Modelo del procesador Memoria

Sequential modelo de memoria La consistencia es un modelo de referencia teórico, el procesador JMM y modelo de memoria por lo general diseñado como referencia el modelo de memoria secuencial consistencia. JMM procesador y memoria modelo tendrán en el diseño del modelo de la consistencia secuencial para hacer un poco de relajación, ya que si el orden exacto para lograr procesador de consistencia de datos y JMM, entonces un montón de optimizaciones de procesador y compilador debe ser desactivado, lo que rendimiento de ejecución tendrá un gran impacto.

La relajación de los diferentes tipos de operaciones de lectura / escritura de la orden de ejecución de combinación, el modelo de memoria del procesador común se puede dividir en los siguientes tipos:

  1. Relax programas escritos - las operaciones de lectura secuencial, generando de esta manera un modelo de memoria guardar orden total (referido como TSO).
  2. 1 sobre la base de lo anterior, el programa continúa para relajarse escribir - una secuencia de operación de escritura, generando con ello un modelo de memoria de pedido de tienda parcial (referido como PSO).
  3. 1 y 2 sobre la base de lo anterior, el programa continúa para relajarse lectura - escritura y leer - secuencia de operación de lectura, creando de este modo una orden de modelo de memoria de memoria relajado (referido como RMO) y modelo de memoria PowerPC.

Tenga en cuenta que, cuando el procesador de lectura / escritura operación está relajado, es que no existe dependencia de datos entre la premisa de dos operativo (debido a que el procesador para cumplir con como-si-semántica de serie, el procesador de datos no depende de la presencia de las dos operaciones de memoria no reordenamiento).

Las siguiente tabla muestra los rasgos de detalle del modelo de memoria del procesador común:

Memoria nombre del modelo

procesadores respectivos

Tienda-Load reordenamiento

reordenamiento tienda-tienda

Carga-carga y reordenamiento de carga-tienda

Usted puede leer escrito con anterioridad a otros procesadores

Usted puede leer el procesador actual de escritura anterior

LIBERACIÓN

SPARC-TSO

X64

Y

     

Y

PSO

SPARC-PSO

Y

Y

   

Y

RMO

IA64

Y

Y

Y

 

Y

PowerPC

PowerPC

Y

Y

Y

Y

Y

En esta tabla, podemos ver todos los modelos de la memoria del procesador pueden escribir - razones de reordenamiento leer explica en el primer capítulo: todos ellos utilizan un caché de escritura, caché de escritura puede resultar en la escritura - lectura reordenamiento . Al mismo tiempo, podemos ver el modelo de memoria del procesador permite a principios de leer para escribir el procesador actual, la razón es también porque la caché de escritura: Desde el buffer de escritura es visible sólo para el procesador actual, esta función puede conducir a más que el procesador actual otros procesadores para ver escrita almacenan temporalmente en su propia escritura en la memoria caché.

En la tabla anterior los diversos procesador modelo de memoria, de arriba a abajo, el modelo de fuerte a débil. Cuanto más la búsqueda del rendimiento del procesador, el diseño del modelo de memoria será más débil. Debido a que estos procesadores quieren que su modelo de memoria obligado para mejor, para que puedan hacer tanto la optimización para mejorar el rendimiento.

Dado que el modelo de memoria del procesador común más débil que JMM, coloque el compilador al generar la instrucción de código de bytes de Java se ejecutará en secuencia insertada barrera de memoria para limitar el procesador de reordenación. Mientras tanto, ya que la fuerza de los diversos procesadores no es el mismo modelo de memoria, con el fin de mostrar una constante de programadores modelo de memoria en distintas plataformas de procesador, JMM diferentes procesadores necesitan para insertar el número de barreras de memoria y variedad ellos no son los mismos. La siguiente figura muestra una vista esquemática de los diferentes procesadores barrera JMM memoria del modelo de memoria pueda insertarse:

Como puede observarse, las diferencias protegen JMM modelo de memoria del procesador, se presenta un modelo de memoria es programador de Java consistentes en diferentes procesadores internet.

La relación entre el JMM, modelo de memoria del procesador y modelo de memoria consistencia secuencial

JMM es un modelo de memoria a nivel de lenguaje, el modelo de memoria del procesador es un modelo de memoria a nivel de hardware, secuencial modelo de memoria de la consistencia es un modelo de referencia teórico. La siguiente es una memoria modelo de lenguaje, el modelo de memoria del procesador y la fuerza de contraste modelo de consistencia secuencial es una vista esquemática de la memoria:

De la gráfica podemos ver: Comunes cuatro tipos de modelo de memoria del procesador de la lengua de uso más frecuente en el modelo 3 más débil memoria, modelo de memoria del procesador y memoria modelo idioma que no sea el modelo de memoria consistencia secuencial a ser débil. Con los modelos de memoria del procesador, más la búsqueda de la ejecución de la actuación lingüística será más débil diseño de modelo de memoria.

diseño JMM

JMM desde el punto de vista del diseñador, en el diseño de JMM, necesidad de considerar dos factores clave:

  • Los programadores usan el modelo de memoria. Los programadores quieren modelo de memoria es fácil de entender, fácil de programar. Los programadores esperanza se basa en un sólido modelo de memoria para escribir código.
  • Lograr compilador y el modelo de memoria del procesador. Compilador y el modelo de memoria del procesador obligados a querer ellos lo menos posible, para que puedan hacer tanto la optimización para mejorar el rendimiento. Los compiladores y procesadores esperan lograr un modelo de memoria débil.

Debido a estos dos factores se contradicen entre sí, por lo que el grupo de expertos objetivo central JSR-133 en el diseño de JMM es encontrar un buen equilibrio: por un lado, proporcionar visibilidad de garantía de la memoria lo suficientemente fuerte como para el programador y, por otro lado, para compilar restricciones y procesadores para relajarse lo más posible. Veamos como JSR-133 es para lograr este objetivo.

Como ejemplo, consideremos el área circular antes mencionada calculada código de ejemplo:

double pi  = 3.14;    //A
double r   = 1.0;     //B
double area = pi * r * r; //C

Hay tres sucede- antes de calcular la relación entre el código de ejemplo anterior área del círculo:

  1. A sucede- antes de B;
  2. B ocurre- antes de C;
  3. A sucede- antes de C;

Dado que A ocurre- antes que B, sucede- antes requerirá definición: Un resultado de la operación que se realiza en el B visible, y el orden de ejecución de operaciones por delante operación A B. Sin embargo, la semántica de la perspectiva del programa, A y B no cambian el resultado de la ejecución es decir, la reordenación del programa, sino que también pueden mejorar el rendimiento de la ejecución del programa (esto permite la reordenación reduce las restricciones en la optimización de los compiladores y procesadores ). En otras palabras, estos tres sucede- antes de la relación anterior, aunque se necesitarán el 2 y 3, pero 1 no es necesario. Por lo tanto, JMM ocurre- antes de la prohibición reordenamiento divide en las siguientes dos categorías:

  • El programa va a cambiar los resultados de la aplicación de reordenamiento.
  • El programa no cambiará los resultados de la aplicación de reordenamiento.

JMM reordenación de estas dos naturalezas diferentes, tomó una estrategia diferente:

  • La reordenación de los resultados va a cambiar para el programa, JMM requiere compiladores y procesadores debe prohibir tal reordenamiento.
  • Cambio de orden de no cambiará el resultado de la ejecución del programa, el compilador JMM y un procesador no es necesario (esto permite la reordenación de JMM).

El siguiente es un diseño esquemático de JMM:

Como se puede ver en la figura por dos puntos:

  • sucede- antes JMM normas previstas para el programador para satisfacer las necesidades de los programadores. sucede- de JMM antes de que la norma no sólo es fácil de entender, pero también proporciona una fuerte memoria suficiente para garantizar la visibilidad de los programadores (y algo de memoria para asegurar la visibilidad no es necesariamente verdadero, como el anterior Un ocurre- antes de que B).
  • JMM compilador y el procesador se han consolidado lo menos posible. Podemos ver en el análisis anterior, se JMM, de hecho, sigue un principio básico: no cambian los resultados del programa (consulte el programa de un solo subproceso y correcta sincronización del programa multihilo), la forma en la optimización de los compiladores y procesadores harán . Por ejemplo, si el compilador, después de un análisis cuidadoso, encuentra un bloqueo sólo se puede acceder por un solo hilo, la cerradura puede ser eliminada. Como otro ejemplo, si el compilador, después de un análisis cuidadoso, se encuentra una variable volátil sólo será sólo un único acceso hilo, por lo que el compilador puede poner estas variables volátiles para ser tratada como una variable ordinaria. Estas optimizaciones ni alterarán los resultados del programa, sino también mejorar el rendimiento de los programas.

JMM garantiza la visibilidad de la memoria

los programas de la memoria Java para garantizar la visibilidad del programa de acuerdo con el tipo se puede dividir en las siguientes tres categorías:

  1. programas de un único subproceso. Visibilidad problema de memoria de programa de un solo subproceso no se produce. Compilador, tiempo de ejecución, y el procesador va a trabajar juntos para garantizar la aplicación de los resultados de la misma resultado de un único subproceso de ejecución del programa del programa en consistencia de datos secuencial.
  2. programa de multi-threaded sincronizado correctamente. programa multiproceso será adecuadamente sincronizada con secuencial (resultado de la ejecución del programa de los resultados de la ejecución del programa en el mismo modelo de consistencia de memoria de secuencia) consistencia. Este es el foco de atención JMM, JMM para proporcionar visibilidad de garantía de la memoria para los programadores reordenando las restricciones de los compiladores y procesadores.
  3. No hay sincronización programa / multi-hilo no está sincronizado correctamente. JMM les proporcionan garantía mínima de seguridad: leer el valor de ejecución del hilo, o el valor antes de que un hilo está escrito, o bien los valores predeterminados (0, null, false).

La siguiente figura muestra los resultados de la aplicación de JMM en estos tres programas en el modelo de memoria consistencia secuencial de las similitudes y diferencias:

Mientras un programa multi-roscado es la sincronización correcta, JMM garantizar la aplicación de los resultados del programa en cualquier plataforma de procesador, de acuerdo con el modelo de memoria consistencia secuencial en la aplicación de los resultados del programa.

JSR-133 parche en el modelo de memoria de edad

JSR-133 parche en el modelo de memoria de edad antes de JDK5 dos razones principales:

  • Mejorada la semántica de memoria volátil. viejo modelo permite que la memoria volátil y un reordenamiento variables regular. JSR-133 y la variable volátil restringido el reordenamiento variable común de escritura tan volátil - leer y liberación de bloqueo - con la misma semántica memoria de adquisición.
  • Mejorar la semántica de memoria finales. En el modelo de memoria de edad, leído muchas veces el valor de una variable definitiva de la misma puede no ser la misma. Por esta razón, JSR-133 para aumentar el peso final de los dos colación. Ahora, la seguridad final se ha inicializado.

===

Publicados 169 artículos originales · ganado elogios 6 · vistas 3509

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/104742703
Recomendado
Clasificación