我发现,java.util.concurrent或java.lang中的许多操作都执行本机方法调用。
例如,来自compareAndSwapInt()
的原生sun.misc.Unsafe
可能会在高负载并发应用中广泛调用。
JNI调用被认为比java方法调用慢得多,无法通过JIT 内联或优化,并且此类调用具有自己的堆栈。我错了,这样的电话会以任何方式进行优化吗?或者JNI调用开销比它执行的作业要小得多(考虑compareAndSwapInt()
示例)?
通常,我将使用JNI实现membars(看起来更好看,而不是使用不稳定的r / w)。通过JNI实现它们是一个好主意吗?如果不是,那么如何以更优化的方式做到这一点?