我知道在Java中进行JNI调用时“跨越边界”很慢。
不过,我想知道什么是它,使得它慢?进行JNI调用如此之慢时,底层jvm实现会做什么?
首先,值得注意的是,“慢”是指可能花费数十纳秒的时间。对于琐碎的本机方法,2010年,我在Windows桌面上测得的平均呼叫时间为40 ns,在Mac桌面上测得的平均呼叫时间为11 ns。除非你打很多电话,否则你不会注意到。
也就是说,调用本机方法可能比进行常规Java方法调用慢。原因包括: