哪些VM或GC支持JNI固定?

时间:2014-01-17 00:02:30

标签: java java-native-interface

Get<PrimitiveType>ArrayElements函数系列被记录为复制数组,或者将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为GetPrimitiveArrayCritical的更安全,限制性更小的替代方案。但是,我想知道哪些虚拟机和/或垃圾收集器(如果有的话)实际上是固定数组而不是复制它们。

2 个答案:

答案 0 :(得分:8)

较旧的IBM JVM固定(1.4及之前 - 即:不是当前的IBM J9 JVM)但从那以后,他们没有。一般来说,JVM不喜欢固定,因为它真的会混淆复制垃圾收集器,这是大多数生产JVM今天所做的事情。我不是100%最新的(即:最新的Java 7版本),但历史上HotSpot也没有(因为相同的代际GC原因)。

请注意:今天可能没有明天的JVM,反之亦然,所以你需要编写代码来处理它,就像基础Java库一样。

答案 1 :(得分:1)

Shenandoah支持固定(虽然不清楚使用Get*ArrayElements还是仅在Get*Critical时是否这样做):https://shipilev.net/jvm-anatomy-park/9-jni-critical-gclocker/