Это, возможно, косвенно, является одним из принципов Джини. В этом случае, возможно, речь идет о загрузке драйверов. Но поскольку он основан на Java, концепция переноса кода с устройства на устройство является одной из основных философий системы.
Теперь, с этой целью, этот код не «перемещается» сам по себе, а скорее копируется. Он не «покидает» сервер.
Но вы можете видеть, особенно в Java, что если начать с пустой JVM и какой-то оболочки, было бы довольно просто получить код для «перемещения» из одной JVM в другую.
Вы можете видеть процесс следующим образом.
1) Система A имеет запущенное приложение с классами состояния и локальными классами.
2) Система B имеет «оболочку переноса», выполняющуюся в системе.
3) A хочет переместить приложение в B
4) Приостановка приложения и сериализация его состояния может быть такой же простой, как и просто использование серийной Java-объектной сериализации. Этот сериализованный объект имеет метод перезапуска.
5) B устанавливает ClassLoader, который ссылается на классы в Системе A. Этот загрузчик классов будет копировать классы по запросу из A в B, а затем сохранять их локально.
6) A отправляет сериализованное состояние приложения B, который десериализует его.
7) ClassLoader на B начинает вытягивать файлы классов из A, поскольку приложение десериализовано
8) После десериализации объекта B вызывает метод restart, и приложение продолжает работать.
9) A «забывает» о приложении, и B продолжает работать без подключения к A.
Очевидно, что это наивно и чревато потенциальными проблемами.
Но вы можете видеть, как, в частности, с виртуальной машиной, как что-то подобное может работать.
Современные архитектуры виртуальных машин работают над этим процессом, а на самом деле с этим процессом: моментального снимка запущенных виртуальных машин, перемещения образов на другие машины и их запуска. Основы виртуальных машин делают это "легко".
Пример Java - это то, с чем вы можете играть, не становясь инженером виртуализации.