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