Get<PrimitiveType>ArrayElements
函数族被记录为复制数组或将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为比 GetPrimitiveArrayCritical
更安全、限制更少的替代方案.但是,我想知道哪些 VM 和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们。
最佳答案
较旧的 IBM JVM 已固定(1.4 及更早版本 - 即:不是当前的 IBM J9 JVM),但从那时起,它们就没有了。一般来说,JVM 不喜欢固定,因为它确实会扰乱复制垃圾收集器,而这正是当今大多数生产 JVM 所做的事情。我不是 100% 最新的(即:最新的 Java 7 构建),但历史上 HotSpot 也不是(出于相同的世代 GC 原因)。
请注意:今天固定的 JVM 明天可能不会固定,反之亦然,因此您需要编写代码来处理这两种方式,就像基本 Java 库所做的那样。
关于java - 哪些 VM 或 GC 支持 JNI 固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175443/