• JNI操作JAVA 中的字段和方法时的效率


    后面有介绍如何缓存ID 来提高效率后,那我们可能会对使用 JNI访问java字段和方法的效率不太明白,native/java 比起java/native和java/java来的话,效率如何呢?
    当然,这取决于VM 的实现。我们不能给出在大范围的 VM上通用的数据,但我们可以通过分析本地方法回调 java方法和JNI 操作字段以及方法的过程来给出一个大致的概念。

    我们从比较java/native 和java/java的效率开始。java/native调用比java/java要慢,主要有以下几个原因:
    1、java/native比起 JVM内部的java/java 来说有一个调用转换过程,在把控制权和入口切换给本地方法之前,
    VM必须做一些额外的操作来创建参数和栈帧。
    2、对VM来说,对方法调用进行内联比较容易,而内联 java/native 方法要难得多。

    据我们的估计,VM 进行java/native调用时的消耗是 java/java的 2~3倍。当然VM可以进行一些调整,使用 java/native 的消耗接近或者等于java/java 的消耗。
    技术上来讲,native/java 调用和java/native 是相似的。但实际上native/java调用很少见,VM通常不会优化native/java 这种回调方式。
    多数VM 中,native/java调用的消耗可以达到 java/java 调用的10倍。
    使用JNI访问字段的花费取决于通过 JNIEnv 进行调用的消耗。以废弃一个对象引用来说,本地代码必须依赖于特定的 JNI函数才能做到,而这个依赖是必须的,它把本地代码和VM 中对象的内部形式很好地隔离开。

  • 相关阅读:
    吴军博士《浪潮之巅》
    第十二周
    第十一周
    第十周
    第九周
    第四次作业
    第四周
    学习进度表
    世界是数字的
    第二阶段团队第八天成果。
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2829058.html
Copyright © 2020-2023  润新知