Я пытаюсь понять, как торт реализует свой подход множественной JVM.На высоком уровне я думал, что торт работает аналогично nailgun, где есть один экземпляр JVM (один процесс JVM), а новые «JVM» для разных проектов были на самом деле просто clojure / jars, оцениваемыми в новом загрузчике классов (вместе сразличные зависимости jar), что, на мой взгляд, не является новым экземпляром JVM.От В чем разница между Cake и Leiningen? однако, есть следствие того, что существует несколько JVM (одна для тортов и * для проектов), а не только один экземпляр JVM.
Если создаются новые экземпляры JVM, откуда происходит ускорение?Насколько я понимаю, я полагаю, что запуск новой JVM подразумевает создание нового процесса JVM, который влечет за собой те же накладные расходы при запуске, что и обычно.
Если их нет, как добавляются собственные зависимости?Из того, что я понимаю, JVM знает только о собственных зависимостях от аргументов командной строки, переданных до выполнения.Единственный способ, которым я знаю, как обойти это, - воспользоваться приведенным ниже хаком по реализации JVM для Sun / Oracle.
(let [clazz java.lang.ClassLoader
field (.getDeclaredField clazz "sys_paths")]
(.setAccessible field true)
(.set field clazz nil)
(System/setProperty "java.library.path" (apply str (interpose ";" native-paths))))