Tôi đang cố gắng hiểu cách bánh thực hiện nhiều phương pháp JVM của nó. Ở cấp độ cao, tôi nghĩ rằng chiếc bánh đó hoạt động tương tự như súng ngắn, trong đó có một cá thể JVM (một quy trình JVM) và các "JVM" mới cho các dự án khác nhau thực sự chỉ là các đinh/bình được đánh giá trong một trình nạp lớp mới (cùng với các phụ thuộc jar khác nhau), mà trong mắt tôi không phải là một cá thể JVM mới. Tuy nhiên, từ What's the difference between Cake and Leiningen?, có một ngụ ý rằng có nhiều JVM (một cho bánh và * cho các dự án), không chỉ là một cá thể JVM duy nhất.Tính năng JVM liên tục được triển khai trong bánh như thế nào?
Nếu có các trường hợp JVM mới được tạo, tốc độ tăng đến từ đâu? Với sự hiểu biết của tôi, tôi sẽ lý do rằng việc bắt đầu một JVM mới ngụ ý việc tạo ra một quy trình JVM mới mà phát sinh cùng chi phí khởi động như bình thường.
Nếu không có, phụ thuộc gốc được thêm vào như thế nào? Từ những gì tôi hiểu, JVM chỉ biết về các phụ thuộc gốc từ các đối số dòng lệnh được truyền trước khi chạy. Cách duy nhất tôi biết làm thế nào để phá vỡ này là với một Sun/Oracle JVM thực hiện cụ thể hack được liệt kê dưới đây.
(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))))
Cảm ơn. OK, với phiên bản cũ, một JVM mới đã được tạo ra cho mỗi dự án, tôi đã bị ấn tượng sai, một lần nữa, nó giống như súng ngắn hơn, chỉ có một ví dụ JVM. Phương pháp phương pháp nailgun là lý tưởng trong tâm trí của tôi liên quan đến thời gian khởi động JVM và bỏ qua các vấn đề an ninh, mà tôi nhận ra bây giờ không phải là cách bánh được thực hiện. Tôi đã cố gắng để xác định lợi ích liên quan đến thời gian khởi động JVM trong các tình huống khi JVM cần khởi động lại hoặc tạo ra, không phải trên mỗi lệnh bánh. – bmillare
Classlojure có hỗ trợ tải phụ thuộc vào thời gian chạy không? – bmillare