JVM de entrada a interfaz de método nativo competente (7)

Una interfaz de método local

Al hablar de que la máquina virtual Java se está ejecutando antes de que se apile el método nativo del área de datos, digamos que fuera del área de datos se está ejecutando algo llamado interfaz de método nativo abreviatura de JNI (Interfaz nativa de Java).

Descripción general de la arquitectura JVM

¿Qué es el método local?

  1. En pocas palabras, un método nativo es una llamada de Java a una interfaz de código que no es Java

  2. Un método nativo es un método Java: el método se implementa en un lenguaje que no es Java, como C.

  3. Esta característica no es exclusiva de Java. Muchos otros lenguajes de programación tienen este mecanismo. Por ejemplo, en C ++, puede usar extern para decirle al compilador de C ++ que llame a una función de C.

  4. "Un método nativo es un método Java cuya implementación se proporciona mediante un código que no es Java". (El método nativo es un método que no es Java y su implementación específica es la implementación de un código que no es Java).

  5. Cuando se define un método nativo, no se proporciona el cuerpo de implementación (algo así como definir una interfaz Java), porque el cuerpo de implementación se implementa en el exterior mediante un lenguaje que no es Java.

  6. El papel de la interfaz nativa es integrar diferentes lenguajes de programación para Java, y su intención original es integrar programas C / C ++.

Ejemplos de métodos nativos

El método getClass () de la clase Object

public final native Class<?> getClass();

El método start () de la clase Thread

    public synchronized void start() {
    
    
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
    
    
            start0();
            started = true;
        } finally {
    
    
            try {
    
    
                if (!started) {
    
    
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
    
    
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }

    private native void start0();
  • Los ejemplos de código ilustran cómo escribir métodos nativos
  • Cabe señalar que el identificador nativo se puede utilizar junto con otros identificadores de Java, excepto para el resumen
/**
 * 本地方法
 */
public  class IHaveNatives {
    
    

    //abstract 没有方法体
    public abstract void abstractMethod(int x);

    //native 和 abstract不能共存,native是有方法体的,由C语言来实现
    public native void Native1(int x);

    native static public long Native2();

    native synchronized private float Native3(Object o);

    native void Native4(int[] array) throws Exception;

}

2. ¿Por qué utilizar el método nativo?

Java es muy conveniente de usar, pero algunos niveles de tareas no son fáciles de lograr con Java, o cuando estamos muy preocupados por la eficiencia del programa, entonces surge el problema.

2.1 Interacción con el entorno Java

  1. A veces, las aplicaciones Java necesitan interactuar con el entorno de hardware fuera de Java, que es la razón principal de la existencia de métodos nativos. Es posible que deba pensar en Java y algunos de los casos del sistema subyacente cuando, como cierto hardware o sistema operativo para intercambiar información.
  2. El método nativo es precisamente un mecanismo de comunicación de este tipo: nos proporciona una interfaz muy concisa y no necesitamos comprender los engorrosos detalles de las aplicaciones Java.

2.2 Interacción con el sistema operativo

  1. JVM soporta el propio lenguaje Java y las librerías en tiempo de ejecución. Es la plataforma sobre la que viven los programas Java. Consta de un intérprete (interpretando bytecode) y unas librerías conectadas al código nativo.
  2. Sin embargo, después de todo, no es un sistema completo y, a menudo, depende del soporte de un sistema subyacente. Estos sistemas subyacentes suelen ser potentes sistemas operativos.
  3. Al usar el método nativo, pudimos usar Java para realizar la interacción entre jre y el sistema subyacente, e incluso algunas partes de la JVM se escribieron en C.
  4. Además, si queremos utilizar algunas de las características del sistema operativo que el lenguaje Java en sí mismo no proporciona encapsulación, también necesitamos utilizar métodos nativos.

2.3 Java de Sun

  1. El intérprete de Sun está implementado en C, lo que le permite interactuar con el mundo exterior como un C. Jre se implementa principalmente en Java y también interactúa con el mundo exterior a través de algunos métodos locales.
  2. Por ejemplo: la clase java.lang.Threadde setPriority()métodos se implementa en Java, pero es el tipo de llamadas de implementación en el método local setPriority0 (). Este método nativo se implementa en C y se implanta dentro de la JVM en la plataforma Windows 95. Este método nativo finalmente llamará a la API de Win32 setpriority ().
  3. Esta es la implementación específica de un método local proporcionado directamente por la JVM. En más casos, el método local es proporcionado por una biblioteca de enlaces dinámicos externa (biblioteca de enlaces dinámicos externos) y luego llamado por la JVM.

3. Estado actual

En la actualidad, este método se usa cada vez menos, excepto para aplicaciones relacionadas con el hardware, como manejar impresoras a través de programas Java o administrar equipos de producción a través de sistemas Java, que son relativamente raros en aplicaciones empresariales. Debido a que la comunicación entre dominios heterogéneos está ahora muy desarrollada, por ejemplo, se puede usar la comunicación por socket, o también se puede usar el servicio web, etc., no introduciré más aquí.

Supongo que te gusta

Origin blog.csdn.net/BeiisBei/article/details/108940696
Recomendado
Clasificación