[讨论] HotSpot VM里Java程序通过JNI调用C函数的流程
yuyinyang
2014-10-28
请问一下Java程序通过JNI调用C函数的这部分逻辑对应的HotSpot源码在哪?
从JVM进入native C函数的入口和JNI调用完成之后返回JVM的地方分别在哪? |
|
RednaxelaFX
2014-10-29
分解释器版本和“编译”版本两种。
解释器版的实现方式是:解释器对native方法有特殊的入口,由这里生成: http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/312b5f1dc31d/src/cpu/x86/vm/templateInterpreter_x86_64.cpp#l835 InterpreterGenerator::generate_native_entry() 其中进入native函数的call指令在这里生成: http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/312b5f1dc31d/src/cpu/x86/vm/templateInterpreter_x86_64.cpp#l1080 返回也是返回到这里后面。 所谓“编译”版其实是如果一个native方法在解释模式被调用到了CompileThreshold次数之后,HotSpot VM会为该方法专门生成一个“native wrapper”,将其方法属性、参数迁移之类的信息都固化进去,相比解释器版开销会小一些。Native wrapper生成好之后会注册到方法的methodOop / Method里的from_compiled_entry那边 Native wrapper由这里生成: http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/312b5f1dc31d/src/cpu/x86/vm/sharedRuntime_x86_64.cpp#l1723 SharedRuntime::generate_native_wrapper() 其中进入native函数的call指令由这里生成: http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/312b5f1dc31d/src/cpu/x86/vm/sharedRuntime_x86_64.cpp#l2332 从native函数返回就返回到这里后面。 |
相关讨论
相关资源推荐
- Director 11.5 直接可用的几十个效果插件
- 帮你省钱!免费 Adobe 软件替代品推荐
- 制作课件的软件及特点作用
- Director 介绍
- director xtra 获取硬件特征码
- Director Xtra com 串口 插件
- director插件:WebkitXtra 功能演示 前端技术与director的完美融合
- 【更新】.NET用户界面控件Nevron Open Vision v2016.1发布!
- Nevron winForm用户界面套包Nevron User Interface for .NET
- Nevron图表控件winForm.net版Nevron Chart for .NET