mục tiêu cuối cùng của tôi là có thể tải lại các lớp sau khi chúng đã được nạp vào JVM.Dỡ bỏ bộ nạp lớp
Sau khi đọc câu trả lời sau Unloading classes in java?, tôi đã cố gắng triển khai Trình tải lớp của riêng mình, bản thân nó tạo ra một thể hiện khác của Trình nạp lớp (cùng loại riêng của nó) cho mỗi lớp mà nó tải.
vì vậy, kết quả là một lớp cho mỗi Trình tải lớp.
Mục đích là để có thể GC lớp, có nghĩa là tất cả các trường hợp của nó, sau đó để bỏ tải lớp của nó, và để có thể tải lại cùng một lớp từ các byte của nó.
vấn đề là - tôi có thể thấy trường hợp của tôi là rác được thu thập bằng phương thức finalize(), nhưng tôi không thể lấy Trình nạp lớp để tải hoặc bị thu gom rác.
là có bất kỳ ví dụ mã nào, một thử nghiệm đơn giản, cho thấy nó có thể được thực hiện như thế nào?
cảm ơn, bất kỳ trợ giúp sẽ được đánh giá cao
Sửa:
để được rõ ràng hơn, tôi đang quan tâm trong các ví dụ mã nơi instantiation của các đối tượng mới là thông qua 'mới()' toán hạng và Trình nạp lớp không tải lại rõ ràng Lớp trong chính, nhưng sau khi hàm 'new()' mới được gọi.
Khi bạn tải một lớp thông qua một 'Lớp nạp 'tùy chỉnh, bạn sẽ nhận được một đối tượng' Lớp'. Không thể sử dụng toán tử 'new' với điều đó. Sử dụng 'new' ngụ ý rằng mã của bạn đã được liên kết với lớp được sử dụng bởi' new' và do đó, lớp không thể thu gom rác khi mã của bạn chứa biểu thức 'mới' vẫn hoạt động. Bạn phải sử dụng Phản ánh tại thời điểm này, ví dụ: gọi 'newInstance()' trên 'Lớp'. Tất nhiên, mã được nạp động có thể tự sử dụng 'new' để khởi tạo các lớp trong phạm vi riêng của nó. – Holger