zoukankan      html  css  js  c++  java
  • 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 中对象的内部形式很好地隔离开。

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2829058.html
Copyright © 2011-2022 走看看