Terracotta DSO работает, манипулируя байтовым кодом ваших классов (и классов JDK и т. Д.). Инструкции о том, как и когда это сделать, являются частью файла конфигурации Terracotta.
Модификация байтового кода ищет определенные байтовые коды, такие как поле чтения или записи или вход или выход монитора. Всякий раз, когда выполняются эти инструкции, вокруг этого местоположения добавляется код, который выполняет соответствующее действие в распределенном хранилище. Например, когда монитор получен из-за синхронизации, также получается распределенная блокировка (является ли она блокировкой чтения или записи, зависит от конфигурации). Если записано поле в общем объекте, распределенная система должна проверить, удерживается ли блокировка записи, а затем отправить значение данных, которое отправляется на кластерный сервер, который сохраняет его на диске или делит его по сети соответствующим образом.
Обратите внимание, что Terracotta не использует общую кучу , а только граф объектов, указанных в конфигурации. В общем, было бы мало смысла делить всю кучу. Вместо этого для приложения лучше описать доменные объекты, необходимые для распределенного приложения.
Существует много оптимизаций, используемых для повышения эффективности вышеуказанных операций: по проводам передаются только дельты полей и в форме, намного более эффективной, чем сериализация Java, многие дельты можно связывать и отправлять партиями, блокировки фактически "проверяются «конкретному клиенту, так что если данные приложения разделены между клиентами, большинство распределенных блокировок фактически являются локальной операцией, не требующей сетевого вызова и т. д.