Estoy tratando de entender cómo cake implementa su enfoque JVM múltiple. En un nivel alto, pensé que la torta funcionaba de manera similar a la pistola de clavos, donde hay una única instancia de JVM (un proceso de JVM) y las nuevas "JVM" para diferentes proyectos fueron simplemente clojure/jar evaluadas en un nuevo cargador de clases (junto con diferentes dependencias de jar), que en mi opinión no es una nueva instancia de JVM. Sin embargo, desde What's the difference between Cake and Leiningen?, existe la implicación de que hay varias JVM (una para cake y * para los proyectos), no solo una instancia de JVM.¿Cómo se implementa la función de JVM persistentes en cake?
Si hay nuevos casos de JVM creados, ¿de dónde viene el aumento de velocidad viene? Según tengo entendido, razonaría que comenzar una nueva JVM implica crear un nuevo proceso de JVM que incurre en la misma sobrecarga de inicio que de costumbre.
Si no los hay, cómo son las dependencias nativos añadido el? Por lo que entiendo, la JVM solo conoce las dependencias nativas de los argumentos de línea de comando aprobados antes del tiempo de ejecución. La única forma en que sé cómo eludir esto es con un hack específico de implementación JVM de Sun/Oracle que se detalla a continuación.
(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))))
Gracias. OK, con la versión anterior, se creó una nueva JVM por proyecto, tenía la impresión equivocada de que, de nuevo, era más parecido a una pistola de clavos, donde solo hay una instancia de JVM. El método del método de pistola de clavos era ideal en lo que respecta al tiempo de arranque de JVM e ignorar los problemas de seguridad, que ahora me doy cuenta de que no es la forma en que se implementa el pastel. Estaba tratando de determinar el beneficio con respecto al tiempo de inicio de JVM en situaciones en las que era necesario reiniciar o crear la JVM, no por cada comando de tortas. – bmillare
¿classlojure soporta la carga de dependencia nativa en tiempo de ejecución? – bmillare