Tôi muốn hiểu cách trình nạp lớp Java hoạt động. Tôi đã đọc một số bài báo, nhưng có một số điều vẫn chưa rõ ràng với tôi.Tải lớp Java
Theo như tôi hiểu bộ nạp lớp đầu tiên là bộ nạp lớp Bootstrap (BCL). Sản phẩm có được JVM nạp không?
Sau đó, BCL tải thư viện rt.jar và Trình nạp lớp mở rộng (ECL).
Lần lượt, ECL tải các tiện ích mở rộng và Trình tải lớp ứng dụng (ACL). ACL chịu trách nhiệm nạp tất cả các lớp do người dùng phát triển từ classpath.
Mô tả này có chính xác không?
Có một số câu hỏi:
- Có chỉ có một thể hiện của mỗi classloader tồn tại trong ký ức? (BCL, ECL, ACL)?
- Tôi đã xem xét nguyên tắc ủy quyền nhưng có một chút không rõ ràng đối với tôi. Làm thế nào nó hoạt động, chúng ta hãy giả sử chúng ta cần tải MyClass. Jvm đầu tiên cung cấp tên lớp này cho ACL, và đây là điều không rõ ràng đối với tôi, ACL xem qua đường dẫn lớp và nếu không có đại biểu lớp nào làm việc với cha mẹ HOẶC nó ủy nhiệm công việc này cho cha mẹ ngay sau khi gọi, ý tôi là JVM cung cấp tên lớp cho ACL, nó không tìm kiếm lớp này cung cấp cho ECL, CL này lần lượt cũng không thực hiện bất kỳ công việc nào và đưa nó cho BCL, và chỉ khi BCL không thể tìm thấy lớp này, nó trả về mức thấp hơn mức độ (ECL) .... và như vậy. Chuỗi chính xác là gì?
- Khi chúng tôi tạo trình nạp lớp tùy chỉnh lớp cha mẹ là gì? Ứng dụng ClassLoader? Chúng ta có thể chỉ định, ví dụ ECL. Theo phân cấp của bộ nạp lớp không phải là thừa kế, chúng tôi chỉ định cha mẹ trong hàm tạo. Chúng ta có thể lấy dụ của trình nạp lớp ECL để chỉ định nó trong CL tùy chỉnh của chúng ta như là một phụ huynh trong hàm tạo.
- Tại sao các lớp như String, Object và vv không trả lại bất kỳ ClassLoadder nào?
liên quan: http://stackoverflow.com/questions/15250656/how-is-the-classloader-for-a-class-chosen?rq=1 –
http://javarevisited.blogspot.co .uk/2012/12/how-classloader-works-in-java.html; –