2012-04-02 7 views
15

Creo que entiendo la relación de sucedáneo antes de las variables individuales. Si escribo un campo volátil, todas las lecturas posteriores de este campo contendrán este nuevo valor. Escribir volatile cruza la barrera de la memoria y arroja un nuevo valor a la memoria principal.Modelo de memoria Java: ¿qué es lo que se vacía exactamente en la memoria al cruzar la barrera de la memoria?

Todavía no estoy seguro de lo que sucede en todos los demás casos, por ejemplo Thread.start(), synchronized o cerraduras nuevas en java.util.concurrent. ¿Qué significa que también crucen la barrera de la memoria? ¿Qué datos se descargan de la memoria caché local a la memoria principal? En otras palabras, ¿cuál es el alcance del cruce?

Es todo siempre enrojecido? Ahora volviendo al volatile, ¿se vacia más que solo el campo volatile?

Respuesta

12

Cuando se cruza una barrera de memoria, JVM sincroniza todas las variables almacenadas localmente (en el contexto del hilo actual) con la memoria principal. Además de eso, elimina los datos almacenados en caché localmente que están marcados como sucios en la memoria principal.

En cuanto a la volatilidad - sí, también sincroniza todo caché local con la memoria principal, no sólo el campo volátil única (desde 1,5)

http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml

+0

Buen punto. Cambié el idioma. –

+0

Además, debe mencionar que elimina cualquier almacenamiento en caché que esté sucio en la memoria central. Perdón por ser quisquilloso. Esta es una buena pregunta. – Gray

+0

@Gray ¿podría elaborar (o proporcionar un enlace) sobre el almacenamiento en caché sucio en la memoria principal? ¿Qué es? –

Cuestiones relacionadas