【发布时间】:2012-12-18 10:20:16
【问题描述】:
首先让我说,这个问题更多是出于好奇而不是真正的必要性。
我很想知道从 Java 调用 JNI 的开销是多少,比如 System.arraycopy 与分配数组并使用 for 循环复制元素。
如果开销很大,那么可能有一个粗略的“幻数”元素,它可以通过简单地使用 for 循环而不是使用系统调用来补偿。而且,导致这种开销的系统调用到底涉及什么? 我猜堆栈必须被推送到调用的上下文中,这可能需要一段时间,但我无法为整个过程找到一个很好的解释。
让我澄清一下我的问题:
我知道使用 arraycopy 是在 Java 中复制数组的最快方法。
话虽如此,假设我正在使用它来复制一个只有一个元素的数组。由于我正在调用底层操作系统来执行此操作,因此 必须 在此调用中产生开销。我很想知道这个开销是什么以及在调用过程中会发生什么。
很抱歉,如果使用 arraycopy 误导了您我的问题的目的。我很想知道 JNI 调用的开销,以及实际调用中涉及的内容。
【问题讨论】:
-
请注意,
System调用是一个有点令人困惑的术语,因为它可能被误认为是 system call。 -
对了,stackoverflow.com/questions/2772152/…里面的资料很丰富
-
删除了我的答案,我想这会对你有所帮助:stackoverflow.com/questions/7699020/what-makes-jni-calls-slow