Tôi có thể tải xuống mã nguồn phương thức gốc java ở đâu? Ví dụ, tôi muốn biết mã nguồn của System.arraycopy()
, nhưng tôi không thể tìm thấy.Mã nguồn phương pháp gốc Java
Trả lời
Bạn có thể tải xuống mã nguồn OpenJdk here.
Trong thư mục jdk\src\share
bạn có thể nhận mã nguồn.
jdk\src\share\native
là phương pháp natice souce viết bằng c và C++.
jdk\src\linux
nguồn cho Linux.jdk\src\windows
nguồn cho cửa sổ.jdk\src\solaris
souce for solaris.jd\src\share
nguồn chung.
ví dụ: System.arrayCopy();
int tập tin hotspot\src\share\vm\oops\objArrayKlass.cpp
dòng 168:
void objArrayKlass::copy_array(arrayOop s, int src_pos, arrayOop d,
int dst_pos, int length, TRAPS) {
assert(s->is_objArray(), "must be obj array");
if (!d->is_objArray()) {
THROW(vmSymbols::java_lang_ArrayStoreException());
}
// Check is all offsets and lengths are non negative
if (src_pos < 0 || dst_pos < 0 || length < 0) {
THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException());
}
// Check if the ranges are valid
if ((((unsigned int) length + (unsigned int) src_pos) > (unsigned int) s->length())
|| (((unsigned int) length + (unsigned int) dst_pos) > (unsigned int) d->length())) {
THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException());
}
// Special case. Boundary cases must be checked first
// This allows the following call: copy_array(s, s.length(), d.length(), 0).
// This is correct, since the position is supposed to be an 'in between point', i.e., s.length(),
// points to the right of the last element.
if (length==0) {
return;
}
if (UseCompressedOops) {
narrowOop* const src = objArrayOop(s)->obj_at_addr<narrowOop>(src_pos);
narrowOop* const dst = objArrayOop(d)->obj_at_addr<narrowOop>(dst_pos);
do_copy<narrowOop>(s, src, d, dst, length, CHECK);
} else {
oop* const src = objArrayOop(s)->obj_at_addr<oop>(src_pos);
oop* const dst = objArrayOop(d)->obj_at_addr<oop>(dst_pos);
do_copy<oop> (s, src, d, dst, length, CHECK);
}
}
Tôi không chắc chắn nguồn đó ví dụ System.arraycopy() Sẽ ở đó. Tôi đang xem gói trong 'openjdk \ jdk \ src \ share \ native \ java \ lang \ System.c', và nó chỉ bao gồm tệp tiêu đề' java_lang_System.h' mà không có thông tin, vì vậy bạn chắc chắn nó ở đó? – eis
@eis được cập nhật ở trên. – lichengwu
được thăng hạng để cập nhật, cảm ơn! – eis
Phương pháp gốc và được thực hiện khác nhau bởi Máy ảo bạn đang sử dụng. Không có cách nào thực hiện phương thức này, và trên thực tế mã khác có thể được thực hiện trên các kiến trúc hoặc máy ảo khác nhau.
- 1. Mã nguồn của các phương thức gốc có sẵn không?
- 2. Nơi tìm mã nguồn cho các phương thức gốc java.lang?
- 3. Các phương pháp quản lý mã nguồn
- 4. Gọi một phương pháp chung với nguồn gốc đúng loại
- 5. xem mã nguồn gốc từ Eclipse
- 6. Cách tìm mã nguồn của hàm java gốc
- 7. phương pháp ruby gốc để nén/mã hóa chuỗi?
- 8. Định dạng phương pháp gốc trong Java - kết quả lạ
- 9. Hiệu quả của phương pháp nguồn Java của tôi?
- 10. Mã nguồn khác với phiên bản gốc
- 11. Mã nguồn API Java
- 12. Một dòng đơn giản, phương thức mã hóa/giải mã gốc trong Java
- 13. phân tích cú pháp đang tĩnh cho Java mã nguồn để trích xuất các phương pháp/comments
- 14. Git dường như không muốn giữ nguyên nguồn gốc địa phương về nguồn gốc/chủ
- 15. tải FMOD hoàn toàn từ mã nguồn gốc
- 16. Mã nguồn Java - Process.destroy() cho Linux
- 17. mã gốc cho lớp Java Toán
- 18. Tại sao System.arraycopy có nguồn gốc trong Java?
- 19. Các phương thức gốc trong Java
- 20. Phương pháp quá tải: phễu cuộc gọi đến lớp có nguồn gốc lý luận quá tải
- 21. Calling overriden phương pháp trong lớp có nguồn gốc từ Base Class
- 22. Phương pháp công cộng bổ sung trong các lớp học có nguồn gốc?
- 23. Tạo Generic Class Instance từ Phương pháp tĩnh trong một lớp có nguồn gốc
- 24. phương pháp ảo tinh khiết trong lớp trừu tượng có nguồn gốc
- 25. Mã byte vào mã nguồn Java
- 26. Mã Java - đang tìm mã nguồn
- 27. Phương pháp chính Java, Kiểu mã hóa tốt
- 28. Đính kèm Mã nguồn Java
- 29. Java - Phương pháp ảo
- 30. Java: `Phương pháp static`
phương pháp bản địa và thực hiện khác nhau bởi Virtual Machine bạn đang sử dụng. Không có cách nào thực hiện phương thức này, và trên thực tế mã khác có thể được thực hiện trên các kiến trúc hoặc máy ảo khác nhau. – epsalon
@epsalon Tôi sẽ nghĩ rằng đủ điều kiện như là một câu trả lời cho điều này :) – eis
Open-JDK có thể có mã nguồn này? Tôi rất mong muốn có một cái nhìn của các mã nguồn gốc, tôi nghĩ rằng đây nên là C/C++ mã nguồn, Cảm ơn – Jack