当前位置: 首页 > 面试题库 >

是什么使JNI通话变慢?

羊舌迪
2023-03-14
问题内容

我知道在Java中进行JNI调用时“跨越边界”很慢。

不过,我想知道什么是它,使得它慢?进行JNI调用如此之慢时,底层jvm实现会做什么?


问题答案:

首先,值得注意的是,“慢”是指可能花费数十纳秒的时间。对于琐碎的本机方法,2010年,我在Windows桌面上测得的平均呼叫时间为40 ns,在Mac桌面上测得的平均呼叫时间为11 ns。除非你打很多电话,否则你不会注意到。

也就是说,调用本机方法可能比进行常规Java方法调用慢。原因包括:

  • JVM不会内联本机方法。也不会为该特定机器及时编译它们-它们已经被编译。
  • 可以复制Java数组以使用本机代码进行访问,然后再复制回去。成本在阵列大小上可以是线性的。我在Windows桌面上测量了100,000个阵列的JNI 复制,平均大约需要75微秒,而在Mac上平均需要82微秒。幸运的是,可以通过GetPrimitiveArrayCritical或NewDirectByteBuffer获得直接访问。
  • 如果该方法传递了一个对象,或者需要进行回调,则本机方法可能会自己对JVM进行调用。从本机代码访问Java字段,方法和类型需要进行类似于反射的操作。签名是在字符串中指定的,并从JVM查询。这既缓慢又容易出错。
  • Java字符串是对象,具有长度并且已编码。访问或创建字符串可能需要O(n)副本。


 类似资料:
  • 问题内容: 我正在使用jProfiler查找Java swing应用程序中的内存泄漏。我确定了数量不断增长的JFrame实例。 此框架被打开,然后关闭。 使用jProfiler并查看GC根目录的路径,只有一个引用“ JNI全局引用”。 这是什么意思?为什么将它挂在框架的每个实例上? 问题答案: Wikipedia很好地概述了Java本机接口,从本质上讲,它允许Java与以其他语言编写的本机操作系统

  • 本文向大家介绍Zookeeper 会话(Session)是什么?相关面试题,主要包含被问及Zookeeper 会话(Session)是什么?时的应答技巧和注意事项,需要的朋友参考一下 Session 可以看作是 ZooKeeper 服务器与客户端的之间的一个 TCP 长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能

  • 问题内容: 到目前为止,我了解Java中的Httpsession概念。 将根据请求创建一个会话对象。 将“字符串”和值与Session对象绑定。 将返回与指定字符串相关联的对象。 我无法理解的是:我正在创建一个会话对象 ,并通过调用为其设置名称。在这里,此代码位于服务器内部。对于每个人,当他尝试登录时,将在服务器中执行相同的代码。在此方法中,字符串值是一个常量。因此,创建的每个会话对象都将由我提供

  • 问题内容: 我了解对数据库事务处理概念的一般理解。我们访问事务内的数据库以确保ACID属性。 在Hibernate中,有一个称为会话的概念。会话的用途是什么?什么时候应该在两个会话中而不是在同一会话中进行数据库访问? 为了进一步说明,我已经看到了hibernate代码, 从会话工厂获取会话 打开会议 开始交易 提交交易 关闭会议 我需要知道的是在这里召开会议的重要性是什么?为什么没有像交易工厂这样

  • 我理解数据库事务概念的一般理解。我们在事务中访问数据库以确保ACID属性。 在Hibernate中有一个称为会话的概念。会话的用途是什么?何时应该在两个会话中而不是在同一会话中访问数据库? 为了解释更多,我看到了hibernate代码 从会话工厂获取会话 打开会话 开始事务 提交事务 关闭会话 我需要知道的是会话在这里的重要性是什么?为什么没有像事务工厂这样的东西,开始事务并提交事务?

  • 主要内容:强连通图前面介绍了《 图存储结构》,本节继续讲解什么是 连通图。 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是   和  ,因此称 V1 和 V3 之间是连通的。 图 1 顶点之间的连通状态示意图 无向图中,如果任意两个顶点之间都能够连通,则称此无向图为 连通图。例如,图