Ich versuche zu verstehen, wie Kuchen seinen multiplen JVM-Ansatz implementiert. Auf einem hohen Niveau dachte ich, dass Kuchen ähnlich wie Nagelpistole funktioniert, wo es eine einzige JVM - Instanz gibt (ein JVM - Prozess), und neue "JVMs" für verschiedene Projekte wurden nur Clojure/Gläser in einem neuen Klassenlader evaluiert (zusammen mit verschiedene JAR-Abhängigkeiten), was in meinen Augen keine neue JVM-Instanz ist. Von What's the difference between Cake and Leiningen? gibt es jedoch eine Implikation, dass es mehrere JVMs gibt (eine für Kuchen und * für die Projekte), nicht nur eine einzelne JVM-Instanz.Wie wird die dauerhafte JVM-Funktion in Cake implementiert?
Wenn neue JVM-Instanzen erstellt werden, woher kommt die Beschleunigung? Mit meinem Verständnis würde ich meinen, dass das Starten einer neuen JVM impliziert, dass ein neuer JVM-Prozess erstellt wird, der denselben Startup-Overhead wie üblich verursacht.
Wenn nicht, wie werden native Abhängigkeiten hinzugefügt? Soweit ich weiß, kennt die JVM nur native Abhängigkeiten von Befehlszeilenargumenten, die vor der Laufzeit übergeben wurden. Der einzige Weg, wie ich dies umgehen kann, ist ein Sun/Oracle JVM-Implementierungs-Hack, der unten aufgeführt ist.
(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))))
Danke. OK, mit der alten Version wurde pro Projekt eine neue JVM erstellt, ich hatte den falschen Eindruck, dass es wieder eher Nagelpistole war, wo es immer nur eine JVM-Instanz gibt. Die Methode der Nagelpistole war für mich in Bezug auf die Startzeit von JVM und das Ignorieren von Sicherheitsproblemen ideal, und ich bin mir bewusst, dass dies nicht die Art und Weise ist, wie Kuchen implementiert wird. Ich habe versucht, den Vorteil in Bezug auf die JVM-Startzeit in Situationen zu ermitteln, in denen die JVM neu gestartet oder erstellt werden musste, nicht bei jedem Cake-Befehl. – bmillare
Unterstützt Classlojure das native Laden von nativen Abhängigkeiten? – bmillare