首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM如何执行JNI

JVM(Java虚拟机)执行JNI(Java Native Interface)的过程如下:

  1. JNI是Java提供的一种编程框架,用于在Java程序中调用非Java代码(如C、C++代码)的接口。它允许Java程序与底层系统进行交互和集成。
  2. 当Java程序需要调用非Java代码时,开发人员首先需要在Java代码中声明native方法,使用关键字native标记。例如:native void myMethod();
  3. 在编译Java源代码时,编译器会生成对应的字节码文件。由于native方法无法在字节码中直接执行,编译器会生成一个JNI调用指令(例如:invokestatic native)来表示对应的本地方法。
  4. JVM加载字节码文件,并解析JNI调用指令。在执行到JNI调用指令时,JVM会检查本地方法库(Native Library)中是否存在对应的本地方法实现。
  5. 本地方法库是由开发人员使用C、C++等语言编写的动态链接库。JVM会根据配置的本地方法库路径来加载对应的库文件。
  6. 一旦找到对应的本地方法实现,JVM会通过JNI框架将Java参数和调用信息传递给本地方法。
  7. 本地方法在执行时,可以使用C/C++等语言的特性和功能。它可以调用底层系统的API、操作硬件、访问操作系统资源等。
  8. 执行完本地方法后,结果会通过JNI框架返回给JVM,并继续执行Java代码。

JVM执行JNI的过程中,关键在于Java程序和本地方法的交互。JNI提供了一套丰富的接口函数,用于在Java程序和本地方法之间进行数据传递和类型转换。

推荐的腾讯云相关产品: 腾讯云提供了云计算平台,适用于各类应用场景。以下是相关产品介绍链接地址:

  1. 云服务器(CVM):腾讯云提供高性能、可扩展的云服务器实例,可以用于部署应用程序和托管服务。 链接地址:https://cloud.tencent.com/product/cvm
  2. 云数据库 MySQL:腾讯云提供高可用、高性能的云数据库服务,支持主从复制、容灾备份等功能。 链接地址:https://cloud.tencent.com/product/cdb_mysql
  3. 人工智能开放平台(AI Lab):腾讯云提供丰富的人工智能技术和服务,包括语音识别、图像识别、自然语言处理等。 链接地址:https://cloud.tencent.com/product/ailab

请注意,以上推荐的产品和链接仅供参考,具体选择和使用需根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何通过JNI传递对象执行回调

JNI的全称是java native interface,用来调用某些特定于系统平台或者硬件的操作,但是它只能调用c/c++的代码,若是其它语言代码,只能通过c/c++进行二次调用。...关于JNI的完整技术文档,大家可以查看下面这个网址: http://java.sun.com/j2se/1.5.0/docs/guide/jni/ 下面我们看下JNI如何执行回调函数:...我们知道在c/c++回调函数可以通过函数指针执行,但是在Java中已经没有指针的概念,在这里,我们先传递一个类对象给native函数,然后再dll中调用期望的函数即可。.../* Header for class jni_Log */ #ifndef _Included_jni_Log #define _Included_jni_Log #ifdef __cplusplus...同级的目录中,运行命令java jni.Log,即可看到控制台成功打印信息 “i am a error!

2.4K30
  • JVM如何执行Java程序的(串联JVM面试题)

    介绍一下JVM内存区域划分堆为什么要分代设计?什么是内存的担保机制?为什么Eden:S0:S1 比例是8:1:1?描述一下对象内存分配过程如何判断对象已死?讲一讲内存模型?常用的JVM调优参数有哪些?...接下来,看一下它们是如何工作的。在这之前,要对字节码现有一个认识,毕竟它贯穿了Java代码运行的整个流程。Java虚拟机对Java编程语言一无所知,只知道一种特定的二进制格式,即类文件格式。...JVM 各部件如何协同工作?...静态代码块执行完成后,JVM会继续调用main方法。如果执行Java命令的字节码文件中没有main方法,JVM就会报错,这个是JVM规范。...如果对象过多导致空间不足,JVM就会通过垃圾回收来释放一些空间。“如何确定对象是垃圾”、“使用哪个垃圾回收器”、“用了什么回收算法”就需要我们去了解。实例初始化后,会将对象的引用存储到局部变量表中。

    15520

    jvm执行引擎解读

    执行引擎概述 执行引擎属于JVM的下层,里面包括解释器、及时编译器、垃圾回收器,执行引擎是Java虚拟机核心的组成部分之一。...简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。   执行引擎的工作流程 执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。...Java字节码的执行是由JVM执行引擎(后端编译器)来完成,流程图如下所示:   什么是解释器(Interpreter)?...现在JVM执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。...不过无论如何,基于解释器的执行模式仍然为中间语言的发展做出了不可磨灭的贡献。

    23130

    JVM执行引擎(Execution Engine)

    上文:JVM-直接内存(Direct Memory) ? 历史: ? 在了解执行引擎前先了解一下计算机的语言的发展历史。如下: 机器码?...什么是jvm执行引擎? 执行引擎是JVM的核心组成部分之一,主要用来执行Java生成.class的字节码,解析成各种cpu所能执行的二进制指令。...因为JVM加载字节码相关指令后,这些字节码指令、符号表和其他辅助信息无法被操作系统直接识别运行,所以就需要执行引擎来实现。...Hotspot JVM执行方式 jvm启动的时候非常快,这时候用的是解释器,这样的话可以减少编译的时间,且不会出现较长的卡顿,并且随着程序运行的时间推移,即时编译时发生了作用,这里候通过热点探测功能...最后 JVM执行引擎是JVM的核心功能,主要起到翻译工作,当然有直接翻译和间接翻译(JIT),起到非常关键的作用,通过热点探测进行统计是否通过编译器进行生成系统可执行的机器码,对后续相关的对象逃逸也跟此内容关联极大

    1.2K20

    JVM | OpenJDK源码执行HelloWorld

    java中用命令行执行HelloWorld 平时我们在运行java程序时, 一般有两种选择, 1是在服务器上直接用java -jar 命令来运行程序, 2是在idea中直接点击运行/debug,如下图所示...=UTF-8 -classpath /Users/lixiang/code/tools/tools-java/out/production/classes com.platform.tools.jvm.Main...中运行java代码,主要是前面的java命令,用我们自己编译的, 然后后面的参数等直接复制就可以了,如下图所示: 然后点击运行,就可以在ClionDebug面板中, 看到如下所示我们的java代码输出 JVM...执行Java代码 这里我们要接着昨天的版本号输出继续往后讲,在java.c文件508行,可以看到加载main函数所在的类 点进去之后,可以看到....Clion中执行java程序, 这样才能为后面的调试打下基础,小伙伴们,加油!

    88230

    JVM | JVM的启动及java -version的执行过程

    那么jvm做为一个C++应用程序, 他也肯定有man函数, 我们坚定这一点, 然后再去看代码 JVM的main函数 我们可以通过全局搜索可以定位到main函数的位置,如下图所示: 点进去文件可以看到jvm...int margc; char** margv; int jargc; char** jargv; const jboolean const_javaw = JNI_TRUE...JVMInit 这个方法就跟操作系统有关了,如下图所示不同的系统会去执行不同的文件的中代码 在对应系统的JVMInit的方法中, 会调用java.c 中的ContinueInNewThread方法,并在方法...CallStaticVoidMethod(env, ver, print, printTo); } 我们在Idea中,引入11的JDK , 然后就可以看到对应的输出 总结 至此,java -version的执行过程...,我们是已经了解了, 而且借着java -version 我们还了解到了jvm虚拟机启动的过程.

    92910

    JVM之字节码执行引擎

    概述 在Java中,编译器讲源代码转成字节码,那么字节码如何执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1....输出:执行结果。 物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。...JVM实现动态分派 动态分派在Java中被大量使用,使用频率及其高,如果在每次动态分派的过程中都要重新在类的方法元数据中搜索合适的目标的话就可能影响到执行效率,因此JVM在类的方法区中建立虚方法表来提高性能...虚方法表会在类加载的连接阶段被创建并开始初始化,类的变量初始值准备完成之后,JVM会把该类的方法表也初始化完毕。...方法表的结果如下图所示: 字节码解释执行引擎 许多java虚拟机的执行引擎在执行java的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。

    33820

    深入分析JVM执行引擎

    咱们的执行引擎就类似于这部“翻译机”。 二、概述 执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。...当一条字节码指令被解释执行后,接着再根据pc寄存器中记录的下一条需要被执行的字节码指令执行解释操作。JVM解释器一共有两套,一套是远古的字节码解释器,另一套是现在普遍使用的模板解释器。...1、字节码解释器 字节码解释器在执行过程中通过纯软件代码模拟字节码执行,效率非常低。...可以通过命令显示的指定JVM在运行时到底使用哪种JIT编译器。 2.1 c1编译器 指定Java虚拟机运行在client模式下,使用C1编译器。C1编译器会对字节码进行简单和可靠的优化,耗时短。...六、执行引擎执行程序的方式 在默认的情况下,HotSpot VM采用的是解释器和JIT编译器并存的架构,当然读者可以根据具体的应用场景,通过虚拟机参数,为虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行

    48420

    Java 虚拟机-JVM如何执行方法调用的?(上)

    文章收录地址:Java-Bang 专注于系统架构、高可用、高性能、高并发类技术分享 JVM 虚拟机.jpg 前不久在写代码的时候,我不小心踩到一个可变长参数的坑。...JVM 的静态绑定和动态绑定 接下来,我们来看看 Java 虚拟机是怎么识别方法的。 Java 虚拟机识别方法的关键在于类名、方法名以及方法描述符(method descriptor)。...而对于 invokevirtual 以及 invokeinterface 而言,在绝大部分情况下,虚拟机需要在执行过程中,根据调用者的动态类型,来确定具体的目标方法。...上一篇中我曾提到过,在执行使用了符号引用的字节码前,Java 虚拟机需要解析这些符号引用,并替换为实际引用。...总结与实践 今天我介绍了 Java 以及 Java 虚拟机是如何识别目标方法的。

    1.4K70

    Java 虚拟机:JVM如何执行方法调用的?(下)

    JVM 虚拟机.jpg 我在读博士的时候,最怕的事情就是被问有没有新的 Idea。有一次我被老板问急了,就随口说了一个。...那么在实际运行过程中,Java 虚拟机是如何高效地确定每个“乘客”实例应该去哪条通道的呢?我们一起来看一下。 1....这些方法可能是具体的、可执行的方法,也可能是没有相应字节码的抽象方法。...我们知道,方法调用指令中的符号引用会在执行之前解析成实际引用。对于静态绑定的方法调用而言,实际引用将指向具体的目标方法。...其实是不能的,上述优化的效果看上去十分美好,但实际上仅存在于解释执行中,或者即时编译代码的最坏情况中。

    1.2K20

    【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

    JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ---- 1....线程执行函数 ---- 1. 线程执行函数的要求 : C++ 中规定线程执行函数的函数指针类型是 void *(PTW32_CDECL *start) (void *) ; 2....代码示例 : /* 定义线程中要执行的方法 将该函数的指针作为线程创建方法 pthread_create 的第三个参数 C++ 中规定线程执行函数的函数指针类型是 void *(PTW32_CDECL...代码示例 : /* 线程执行的方法 如果在 Native 层执行耗时操作 , 如下载文件 , 需要在线程中处理 JNI 方法参数中的 JNIEnv 指针是不能跨线程使用的 ,...jobject obj; /* 线程执行的方法 如果在 Native 层执行耗时操作 , 如下载文件 , 需要在线程中处理 JNI 方法参数中的 JNIEnv 指针是不能跨线程使用的

    89620
    领券