2013-08-13 27 views
26

Trong java, người ta nói rằng tất cả các lớp đang được nạp bởi các trình nạp lớp.Trình nạp lớp khởi động Java được tải như thế nào?

Vì vậy, trước hết, trình nạp lớp bootstrap tải tất cả các lớp rt.jar.

Vì vậy, tôi vẫn đang bối rối như Classloader cũng là một lớp học, nên ai sẽ tải BootStrapClassloader này.

Vui lòng giải thích.

+0

Xem hai câu trả lời chi tiết (đặc biệt là bằng amicngh) http://stackoverflow.com/questions/11395074/who-load-the-java-system-classloader. Cũng tại đây: http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/index.html – mins

+0

Xem - http://www.javabench.in/2012/02/java-class -loading.html –

+0

Đúng là nhiều lớp từ rt, jar được nạp bởi trình nạp lớp bootstrap, nhưng không phải tất cả. Để xác nhận chỉ cần chạy một chương trình đơn giản với -verbose: đối số lớp như "java -verbose: class HelloWorld". Nó sẽ cung cấp cho tất cả các lớp được nạp bởi JVM. Bạn có thể nhận thấy rằng mỗi và mọi lớp từ rt.jar không được JVM nạp. – hsingh

Trả lời

8

Trình tải lớp khởi động Trình tải lớp khởi động, là trình nạp lớp và tất cả, thực sự là một phần của lõi JVM và được viết bằng mã gốc.

classloaders có thể đối tượng, họ cần một đại diện quá. Trong thực tế, điều này cũng cho phép tạo ra các trình nạp lớp do người dùng định nghĩa.

3

Có một thành ngữ trong tiếng Anh, "Ông kéo mình lên nhờ nỗ lực của mình." Dây nịt khởi động là các tay cầm nhỏ của các cạnh trên của bốt và dĩ nhiên là không thể.

http://en.wikipedia.org/wiki/Booting

Bài báo giải thích quá trình khởi động máy tính, đó là viết tắt của bootstrapping.

gì sẽ xảy ra với tất cả các chương trình của mỗi loại là một bộ nạp của một số bản phân loại một số byte vào bộ nhớ ở đâu đó và bắt đầu thực hiện tại một địa điểm xác định trước trong những byte.

Đối với Java, trình tải dây đeo khởi động có thể hoặc không thể là một lớp Java. (Có thể ai đó biết.) Nhưng nó là một chương trình của một số loại mà tải rất ít các lớp đầu tiên vào bộ nhớ và làm cho JVM bắt đầu thực hiện các bit của mã Java đã nạp. Có lẽ nó tải chính mã JVM. Có lẽ nó chỉ đảm bảo một số bit trước khi nạp mã JVM. Có lẽ, nó thậm chí yêu cầu JVM đã được nạp và chạy.

Chỉ là một phần của quy trình.

+0

Hai xu: 1) Cảm ơn bạn đã nhắc nhở, tôi vừa mới bỏ phiếu. 2) Nửa đầu của câu trả lời này là tốt. Hiệp hai là không chắc chắn. Tôi đã thêm các bit mu vào nó, nhưng ai đó đã không coi chúng là thích hợp. –

+0

Nếu bạn đang tìm kiếm câu trả lời đầy đủ, hãy đọc câu trả lời của tôi bên dưới. (Tôi không thổi kèn của tôi, nhưng nó có câu trả lời của tất cả có thể-bes) –

+0

@ Raúl Điểm của tôi là không quan trọng loại mã nào đang tải mã trong mỗi bước đưa Java lên. Nó đi mà không nói rằng, trên mỗi hệ điều hành, nó phải được mã nguồn gốc mà bắt đầu chạy. Một hệ điều hành chỉ tải mã gốc. Nó mang lại một cái gì đó nhỏ mà tải một cái gì đó lớn hơn. Quá trình lặp đi lặp lại với mỗi thứ được tải, lần lượt, tải một cái gì đó lớn hơn cho đến khi tất cả ở đó. Phần đầu tiên nhỏ hơn, ít mã nguồn gốc hơn là cần thiết cho mỗi hệ điều hành và mã phổ biến hơn cho tất cả các hệ điều hành. Nhưng nó không quan trọng bao nhiêu giai đoạn có để tải. –

23

Trả lời: Khi JVM khởi động, một đoạn mã máy đặc biệt chạy sẽ tải bộ nạp lớp hệ thống. Mã máy này được gọi là Bootstrap/Primordial (hoặc đôi khi - Null) trình nạp lớp.

Nó không phải là một lớp Java, như tất cả các trình nạp lớp khác. Trình nạp lớp bootstrap là các lệnh máy cụ thể nền tảng khởi động toàn bộ quá trình nạp lớp.

Tất cả trình nạp lớp, ngoại trừ trình nạp lớp khởi động, được triển khai dưới dạng lớp Java. Thứ gì đó phải tải trình nạp lớp Java đầu tiên để bắt đầu quá trình này. Việc nạp trình nạp lớp Java thuần túy đầu tiên là công việc của trình nạp lớp bootstrap.

Trình nạp lớp bootstrap cũng quan tâm đến việc tải tất cả mã cần thiết để hỗ trợ Java Runtime Environment (JRE) cơ bản, bao gồm các lớp trong gói java.util và java.lang.

Nguồn: http://www.theserverside.com/tutorial/Classloaders-Demystified-Understanding-How-Java-Classes-Get-Loaded-in-Web-Applications

+2

Thật khó để biết bạn có đang nói tất cả các trình nạp lớp không phải là các lớp Java hay không. Có thể bạn đang nói tất cả các trình nạp lớp là các lớp Java. Việc sử dụng dấu phẩy làm cho nó mơ hồ. (Đây là câu thứ nhất trong đoạn thứ 2 của bạn.) –

+0

Ý tôi là, trong môi trường Java - chỉ Bootstrap CL sẽ là một trình nạp lớp không phải java (native); phần còn lại của họ (hệ thống, ứng dụng, người dùng định nghĩa CLs vv) là Java Class Loaders ............. xin vui lòng xem liên kết. –

-1

JDK cài đặt đường dẫn: jdk\jre\lib\rt.jar

vị trí này được gọi là đường dẫn lớp bootstrap. Trình nạp lớp Bootstrap chịu trách nhiệm tải các lớp từ đường dẫn lớp bootstrap.

Trình tải lớp Bootstrap theo mặc định có sẵn với JVM. Nó được thực hiện trong Native Language Like C và C++.

-2

Trình nạp lớp bootstrap tải các thư viện Java cốt lõi nằm trong thư mục/jre/lib. Trình nạp lớp này, là một phần của JVM lõi, được viết bằng mã gốc.

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