Vấn đề một cách chung chung là mô hình bảo mật của Java mà thực sự cố gắng để ngăn chặn điều đó một lớp học có đã được tải được tải lại.
Tất nhiên Java từ khi bắt đầu đã hỗ trợ tải lớp động, điều khó khăn là tải lại lớp.
Nó được coi là có hại (và vì một lý do chính đáng) mà một ứng dụng java đang chạy đã được tiêm một lớp mới với mã độc. Ví dụ một java.lang.String nứt thực hiện bắt đầu từ internet, mà thay vì tạo chuỗi, xóa một số tập tin ngẫu nhiên hile gọi chiều dài phương thức(). Vì vậy, chúng theo cách Java đã được hình thành (và tôi giả sử .NET CLR do hậu quả, bởi vì nó được đánh giá cao "cảm hứng" trong JVM) là để ngăn chặn một lớp đã nạp để tải lại cùng một máy ảo đó.
Họ cung cấp cơ chế ghi đè "tính năng" này. Các trình nạp lớp, nhưng một lần nữa các quy tắc cho các trình nạp lớp là, họ nên yêu cầu cấp quyền cho trình nạp lớp "cha mẹ" trước khi cố nạp một lớp mới, nếu cha mẹ đã nạp lớp, lớp mới bị bỏ qua.
Ví dụ tôi đã sử dụng classloaders rằng tải một lớp từ LDAP hoặc RDBMS
Các triển khai nóng trở thành một điều cần thiết trong thế giới Java khi máy chủ ứng dụng đã trở thành chủ đạo cho Java EE (và cũng có thể tạo ra sự cần thiết của container vi như mùa xuân để tránh những loại gánh nặng này).
Khởi động lại toàn bộ máy chủ ứng dụng sau mỗi lần biên dịch mọi người đều phát điên.
Nhà cung cấp máy chủ ứng dụng, cung cấp bộ tải lớp "tùy chỉnh" này để giúp triển khai nóng và sử dụng tệp cấu hình, hành vi đó, NÊN bị tắt khi được đặt trong quá trình sản xuất. Nhưng sự cân bằng là bạn phải sử dụng tấn bộ nhớ trong phát triển. Vì vậy, cách tốt để làm điều này là khởi động lại mỗi 3 - 4 triển khai.
Điều này không xảy ra với các ngôn ngữ khác được thiết kế ngay từ đầu để tải các lớp học của họ.
Trong Ruby chẳng hạn, bạn thậm chí có thể thêm các phương thức vào một lớp đang chạy, ghi đè lên một phương thức lúc chạy hoặc thậm chí thêm một phương thức duy nhất vào một đối tượng cụ thể duy nhất.
Sự cân bằng trong các loại môi trường này là bộ nhớ và tốc độ của khóa học.
Tôi hy vọng điều này sẽ hữu ích.
EDIT
tôi đã tìm thấy sản phẩm này một thời gian trước đó hứa hẹn rằng tải lại là làm như đơn giản càng tốt. Tôi không nhớ liên kết khi lần đầu tiên tôi viết câu trả lời này, và tôi làm.
Đó là JavaRebel from ZeroTurnaround
Tại sao lại là Wiki Cộng đồng này? – Eddie
Nghĩ rằng nó có thể giúp đỡ trong trường hợp tôi để lại một cái gì đó không rõ ràng ... làm điều đó theo mặc định, là nghi thức xấu? –
Hài hước: tìm thấy suy nghĩ-o khi đọc lại ngay bây giờ, cảm ơn! –