¿Dónde puedo descargar el código fuente del método nativo de Java? Por ejemplo, quiero saber el código fuente de System.arraycopy()
, pero no puedo encontrarlo.Código fuente del método nativo de Java
Respuesta
Puede descargar el código fuente de OpenJdk here.
En la carpeta jdk\src\share
puede obtener el código fuente.
jdk\src\share\native
es el método natice souce write en c y C++.
jdk\src\linux
fuente para linux.jdk\src\windows
fuente para windows.jdk\src\solaris
souce para solaris.jd\src\share
fuente común.
por ejemplo: System.arrayCopy();
int archivo hotspot\src\share\vm\oops\objArrayKlass.cpp
línea 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);
}
}
No estoy seguro de que la fuente, por ejemplo, System.arraycopy() estaría allí. Estoy mirando el paquete en 'openjdk \ jdk \ src \ share \ native \ java \ lang \ System.c', y solo incluye el archivo de encabezado' java_lang_System.h' sin tener la información, por lo que está seguro ¿está allá? – eis
@eis actualizado arriba. – lichengwu
upvoted para la actualización, ¡gracias! – eis
Métodos nativos e implementados de manera diferente por la máquina virtual que está utilizando. No existe una implementación única de este método, y de hecho, diferentes códigos se pueden ejecutar en diferentes arquitecturas o máquinas virtuales.
- 1. acceda al método sincronizado de java desde el código nativo
- 2. ver código nativo de Eclipse
- 3. Analizador de código fuente Java
- 4. Llamar código Java no nativo de Python
- 5. Código fuente del reproductor de música Android
- 6. Java API Código fuente
- 7. ¿Puedo compilar Java con código nativo?
- 8. Ejecución del código nativo por JVM/CLR
- 9. Android: MediaRecorder @ Código nativo
- 10. vista de código fuente de Java
- 11. ¿Dónde está el código fuente del visor de PDF nativo en Google Chrome?
- 12. ¿Dónde está el código fuente del compilador de Java?
- 13. ¿Cómo generar AST a partir del código fuente de Java?
- 14. código Java: buscando el código fuente
- 15. código fuente del SDK de Android
- 16. Llamar a un método java estático de otro paquete desde el código nativo
- 17. Java: código fuente de parse java, extraiga los métodos
- 18. Crear el método nativo de Java para el constructor
- 19. Método nativo de Javascript en GWT
- 20. Java - Código fuente Process.destroy() para Linux
- 21. Restringir la funcionalidad de código nativo de Java
- 22. Código de bytes al código fuente de Java
- 23. inspeccionar el código nativo
- 24. ¿Por qué System.arraycopy es nativo en Java?
- 25. Devolución del objeto Mat del código nativo a java en OpenCV
- 26. Descarga del código fuente de Eclipse
- 27. Operador Java Lanzador nativo
- 28. ¿Qué es el código nativo?
- 29. Cargando FMOD puramente de código nativo
- 30. Eclipse: ¿Es posible editar la fuente de Java conocida a través del código fuente "adjunto"
métodos nativos e implementado de manera diferente por la máquina virtual que esté utilizando. No existe una implementación única de este método, y de hecho, diferentes códigos se pueden ejecutar en diferentes arquitecturas o máquinas virtuales. – epsalon
@epsalon Creo que califica como una respuesta para esto :) – eis
¿Open-JDK puede tener este código fuente? Estoy muy deseoso de tener un vistazo de estos códigos fuente nativos, creo que estos deberían ser C/C++ código fuente, Gracias – Jack