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

如何通过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作为一个C/C++编写的java运行时,它是如何调用Java函数的呢?...本篇看下 过程 一般的来说,java通过把源码编译成字节码,然后JVM加载字节码,编译成机器码,这跟CLR几乎一模一样。但是生成机器码的形式则完全不一。...其中JVM的Main入口是个比较关键节点,由于是Linux系统,这里又涉及到了Glibc库,同样的跟CLR一样都是Glibc库来调用JVM入口(C Main)进行运行的。...在调用的时候直接获取到entry_point ,跳转到当前正在运行的函数的函数头执行。 结尾: JVM的机器码是先编译好,存储起来。...然后在调用函数的时候直接获取到被调用的函数的函数头地址,跳转到此地址执行被调用的函数。 作者:江湖评谈

53020
您找到你想要的搜索结果了吗?
是的
没有找到

JVM执行引擎(Execution Engine)

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

1.1K20

jvm执行引擎解读

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

17830

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程序, 这样才能为后面的调试打下基础,小伙伴们,加油!

85230

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虚拟机启动的过程.

89810

深入分析JVM执行引擎

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

42620

JVM之字节码执行引擎

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

31620

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.1K20

【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 指针是不能跨线程使用的

69920
领券