¿Qué son los métodos nativos en Java y dónde deben usarse? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Un método nativo tiene la misma sintaxis que un método abstracto, pero ¿dónde se implementa?

 61

5 answers

¿Qué son los métodos nativos en Java y dónde deben usarse?

Una vez que ves un pequeño ejemplo, queda claro:

Main.java :

public class Main {
    public native int intMethod(int i);
    public static void main(String[] args) {
        System.loadLibrary("Main");
        System.out.println(new Main().intMethod(2));
    }
}

Main.c :

#include <jni.h>
#include "Main.h"

JNIEXPORT jint JNICALL Java_Main_intMethod(
    JNIEnv *env, jobject obj, jint i) {
  return i * i;
}

Compilar y ejecutar:

javac Main.java
javah -jni Main
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include \
  -I${JAVA_HOME}/include/linux Main.c
java -Djava.library.path=. Main

Salida:

4

Probado en Ubuntu 14.04 con Oracle JDK 1.8.0_45.

Así que está claro que te permite:

  • llama a una biblioteca compilada cargada dinámicamente (aquí escrita en C) con código de ensamblado arbitrario de Java
  • y obtener resultados de nuevo en Java

Esto podría usarse para:

  • escriba código más rápido en una sección crítica con mejores instrucciones de ensamblaje de CPU (no CPU portable)
  • hacer llamadas directas al sistema (no OS portable)

Con el compromiso de menor portabilidad.

También es posible llamar a Java desde C, pero primero debe crear una JVM en C: Cómo llamar a funciones Java desde ¿C++?

Ejemplo en GitHub para que juegues.

 112
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:25

El método se implementa en código "nativo". Es decir, código que no se ejecuta en la JVM. Normalmente se escribe en C o C++.

Los métodos nativos se utilizan generalmente para interactuar con llamadas al sistema o bibliotecas escritas en otros lenguajes de programación.

 43
Author: Laurence Gonsalves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-19 16:59:11

Me gusta saber dónde usamos Métodos Nativos

Idealmente, no en absoluto. En realidad alguna funcionalidad no está disponible en Java y tienes que llamar a algún código C.

Los métodos se implementan en código C.

 13
Author: Peter Lawrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-24 05:24:41

Los métodos nativos le permiten usar código de otros lenguajes como C o C++ en su código java. Los utilizas cuando Java no proporciona la funcionalidad que necesitas. Por ejemplo, si estuviera escribiendo un programa para calcular alguna ecuación y crear un gráfico de líneas de ella, usaría Java, porque es el lenguaje en el que soy mejor. Sin embargo, también soy competente en C. Digamos que en parte de mi programa necesito calcular una ecuación realmente compleja. Yo usaría un método nativo para esto, porque sé que algunos C++ y sé que C++ es mucho más rápido que Java, así que si escribiera mi método en C++ sería más rápido. Además, digamos que quiero interactuar con otro programa o dispositivo. Esto también usaría un método nativo, porque C++ tiene algo llamado punteros, lo que me permitiría hacer eso.

 4
Author: Zac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 20:22:14

Necesidades de código nativo de Java:

  • acceso y control h/n.
  • uso de s/w comerciales y servicios del sistema[relacionados con h/w].
  • uso de s/w heredados que no se han portado o no se pueden portar a Java.
  • Usando código nativo para realizar tareas de tiempo crítico.

Espero que estos puntos respondan a tu pregunta:)

 4
Author: Cjo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-09 06:02:45