仅仅基于性能,大约有多少“简单”的 java 行相当于进行 JNI 调用的性能损失?
或者尝试以更具体的方式表达问题,如果一个简单的 java 操作,如
someIntVar1 = someIntVar2 + someIntVar3;
如果给定一个 1
的“ CPU 工作”索引,那么使用 JNI 调用的开销的典型(大致)“ CPU 工作”索引是什么?
此问题忽略等待本机代码执行所花费的时间。在电话用语中,它是严格关于“降旗”部分的呼叫,而不是“呼叫频率”。
提出这个问题的原因是有一个“经验法则”,当您知道给定操作的本机成本(来自直接测试)和 Java 成本时,就可以知道何时尝试编写 JNI 调用代码。它可以帮助您快速地避免为 JNI 调用编写代码时发现调出开销消耗了使用本机代码的任何好处所带来的麻烦。
有些人正在纠结于 CPU、 RAM 等的变化。这些实际上都与问题无关——我要求的是 Java 代码行的 亲戚成本。如果 CPU 和 RAM 很差,那么对于 java 和 JNI 来说,它们都很差,因此环境方面的考虑应该得到平衡。JVM 版本也属于“无关”类别。
这个问题并不是要求以纳秒为单位的绝对计时,而是要求以“简单 Java 代码行”为单位的“工作努力”。