2010-02-18 38 views
50

Tôi mơ hồ quen thuộc với số JNI và tôi tò mò muốn xem triển khai máy cụ thể cho một số phương pháp gốc trong gói java.lang. Ví dụ: Thread#currentThread().Nơi tìm mã nguồn cho các phương thức gốc java.lang?

Tôi đã tìm thấy một loạt các tệp DLL trong [JDK_HOME]/jre/bin, nhưng như tôi đã nói tôi đang cố gắng tìm mã nguồn.

Có ai biết mã nguồn gốc có thể được tìm thấy ở đâu không? Nó thậm chí có sẵn, hoặc nó được phân loại bởi Sun (oops tôi có nghĩa là "Chúng tôi đang ở trong nó để giành chiến thắng nó" Oracle)?

Trả lời

32

Đối với JDK6, bạn có thể tải xuống mã nguồn từ java.net. Đối với java.lang câu chuyện bắt đầu tại j2se/src/share/native/java/lang/, và sau đó tìm kiếm ... JDK7 sắp xếp lại cấu trúc thư mục một chút.

Một số phương pháp, chẳng hạn như Object.hashCode, có thể được triển khai bởi điểm phát sóng thay thế hoặc ngoài JNI/Java.

JDK6 được cấp phép tự do thông qua Giấy phép nghiên cứu Java (JRL) và Giấy phép sử dụng nội bộ Java (JIUL). JDK7 và OpenJDK6 được cấp phép theo GPL 2 với ngoại lệ CLASSPATH (nói gần như bạn có thể liên kết đến nó mà không cần bắt virus GNU). Tôi không phải là luật sư.

( BTW: Các luật sư thực muốn chỉ ra rằng tôi vẫn là một nhân viên của Sun Microsystems Sun Anh không còn nữa Nó là tại Oracle...)

Cập nhật (Thêm vị trí cho Thread.c): http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

+0

Sắp xếp thông qua HotSpot, mặc dù chủ yếu thông qua giao diện 'JVM_ *' (giao diện _is_ được gọi?), Cung cấp lớp trừu tượng khá tốt cho bản thân máy ảo. –

+0

Tôi đặc biệt thích thú với thực tế là trình xác minh bytecode được thực hiện bằng cách sử dụng giao diện _only_ JNI và giao diện 'JVM_ *', mà không cần chạm vào bất kỳ nội bộ HotSpot nào. :-) –

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