2009-07-24 24 views

Trả lời

6

JVM chỉ tải các lớp được yêu cầu từ Jar khi được gọi. Nếu ứng dụng cần một lớp thì lớp và tất cả các lớp phụ thuộc khác sẽ được nạp. Không chắc chắn nhưng tôi cho rằng đây là trách nhiệm của trình nạp lớp để định vị lớp từ đường dẫn lớp và tải.

0

Trình tải lớp mặc định chỉ tải những gì cần, khi cần. Nếu bạn có một JAR 10MB trong CLASSPATH của bạn và chỉ cần một tệp .class, JVM sẽ chỉ tải lớp đó vào lần đầu tiên mã của bạn cố gắng truy cập nó. Bytecode .class đi vào không gian perm.

Đó là "có thể điều khiển" theo nghĩa là bạn có thể viết trình tải lớp của riêng bạn, nhưng phải mất một số chuyên môn để làm như vậy.

1

Nó hoàn toàn phụ thuộc vào JVM và trình nạp lớp. Thông số JVM chỉ định lớp cần xuất hiện để được tải khi sử dụng hoạt động đầu tiên. Trình nạp lớp có thể tải một số lớp sớm hơn so với yêu cầu trong dự đoán. Trong thực tế hầu hết các trình nạp lớp đều trì hoãn tải càng lâu càng tốt.

2

Tệp Jar là một dạng tệp zip.

Cách chúng được xử lý phụ thuộc nhiều vào JRE.

Các phiên bản cũ của Sun JRE được sử dụng để bộ nhớ ánh xạ toàn bộ tệp. Điều này sẽ phân bổ bộ nhớ logic, nhưng không nhất thiết phải gây ra bất kỳ dữ liệu nào được nạp từ đĩa. (Windows 32 bit thường không có khả năng phân bổ 3 GB bộ nhớ tiếp giáp, mặc dù bạn có thể thực hiện trên các hệ điều hành khác).

Tôi tin rằng hành vi hiện tại là bộ nhớ ánh xạ thư mục trung tâm ở phía sau tệp trong Windows. Dưới các hệ điều hành khác, nó chỉ đọc. Điều này được kiểm soát bởi #define s trong nguồn.

JDK7 có khả năng làm điều gì đó khác.

Lớp học thường được tải nhẹ nhàng. Tài nguyên được đọc lại mỗi lần. java.util.ResourceBundle cache.

Các vấn đề liên quan