ケーキが複数のJVMアプローチをどのように実装しているかを理解しようとしています。高レベルでは、ケーキは1つのJVMインスタンス(1つのJVMプロセス)があるnailgunに似ていると思っていました。新しいプロジェクトのJVMは、実際には新しいクラスローダーで評価されるクロージャー/異なるjar依存関係)、私の目には新しいJVMインスタンスではありません。しかし、What's the difference between Cake and Leiningen?から、単一のJVMインスタンスだけでなく、複数のJVM(ケーキ用とプロジェクト用)があることを意味します。永続的なJVM機能はケーキにどのように実装されていますか?
新しいJVMインスタンスが作成されている場合、高速化はどこから行われますか?私の理解では、新しいJVMの起動は、通常と同じ起動時のオーバーヘッドを招く新しいJVMプロセスを作成することを意味します。
もし存在しなければ、どのようにネイティブの依存関係が追加されますか?私が理解していることから、JVMはランタイムの前に渡されたコマンドライン引数からのネイティブ依存性しか知りません。私がこれを回避する方法を知っている唯一の方法は、Sun/Oracle JVM実装固有のハックです。
(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))))
ありがとうございました。 OK、古いバージョンでは、プロジェクトごとに新しいJVMが作成されましたが、私は誤った印象を受けていました。もう1つのJVMインスタンスが存在するのはもっと爪に似ています。 nailgunメソッドのメソッドは、JVMの起動時間やセキュリティの問題を無視して、理想的でした。今はケーキを実装する方法ではないことが分かります。私はJVMの起動時間に関する利点を判断しようとしましたが、JVMを再起動または作成する必要がある状況ではなく、すべてのcakeコマンドごとに実行する必要がありました。 – bmillare
classlojureはランタイムネイティブ依存関係の読み込みをサポートしていますか? – bmillare