qué que garbagecollector funcionamiento collector java jvm heap replication

java - que - Replicación de heap JVM entre dos máquinas



que es gc en java (4)

¿Cuáles son los principios básicos de cómo dos computadoras separables conectadas dentro de la misma red que ejecutan la misma aplicación Java mantienen el mismo estado al sincronizar su montón entre ellas?

Creo que Terracotta hace esta tarea, pero no tengo idea de cómo se vería un pseudo código que describiría sus funciones principales.

Solo busco la comprensión de esta tecnología.



Terracota puede manejar eso si se lo dices - ver la descripción de su DSO - Objetos distribuidos compartidos.

Suena bien, pero preferiría algo como EHcache (puede ser respaldado por Terracotta nuevamente) que funciona en un nivel un poco más alto.


Terracotta DSO funciona mediante la manipulación del código de bytes de sus clases (y las clases de JDK, etc.). Las instrucciones sobre cómo y cuándo hacer esto son parte del archivo de configuración de Terracotta.

La modificación de bytecode busca ciertos códigos de byte, como un campo de lectura o escritura o un monitor de entrada o salida. Cada vez que se producen esas instrucciones, se agrega código alrededor de esa ubicación que realiza la acción adecuada en el almacén distribuido. Por ejemplo, cuando se obtiene un monitor debido a la sincronización, también se obtiene un bloqueo distribuido (si es un bloqueo de lectura o escritura depende de la configuración). Si se escribe un campo en un objeto compartido, el sistema distribuido debe verificar que se está reteniendo un bloqueo de escritura y luego enviar el valor de datos que se envía al servidor agrupado, que lo almacena en el disco o lo comparte a través de la red según sea apropiado.

Tenga en cuenta que Terracotta no comparte el montón completo , solo el gráfico de objetos indicado por la configuración. En general, no tiene sentido compartir un montón completo. En su lugar, es mejor que la aplicación describa los objetos de dominio necesarios en la aplicación distribuida.

Hay muchas optimizaciones empleadas para hacer que las operaciones anteriores sean eficientes: solo los deltas de campo se envían por cable y de una forma mucho más eficiente que la serialización de Java, muchos deltas se pueden agrupar y enviar por lotes, los bloqueos se "controlan" en realidad. Cliente particular, de modo que si los datos de la aplicación se dividen entre los clientes, la mayoría de los bloqueos distribuidos son en realidad una operación local que no implica una llamada de red, etc.


Una tecnología emergente que de alguna manera aborda este problema es la memoria transaccional de software distribuido. Obtiene garantías de coherencia de datos fuertes (es decir, capacidad de serialización de 1 copia) y un poderoso mecanismo de control de concurrencia: transacciones.

AFAIK, no hay una solución madura por ahí, pero es prometedora.