哪些虚拟机或垃圾回收器支持JNI固定?

7

Get<PrimitiveType>ArrayElements函数族被记录为要么复制数组,要么将它们固定在原地(并且在这样做的同时,防止紧凑式垃圾收集器移动它们)。它被记录为是GetPrimitiveArrayCritical的更安全、更不限制的替代方案。然而,我想知道哪些虚拟机和/或垃圾收集器(如果有)实际上会固定数组而不是复制它们。

2个回答

10

旧版的IBM JVM(1.4及之前版本 - 即非当前的IBM J9 JVM)会进行钉住,但此后它们就没有了。总的来说,JVM不喜欢钉住内存,因为这会严重破坏复制垃圾收集器的功能,而大多数生产JVM今天都使用此功能。我并不是100%更新到最新的Java 7构建版本,但从历史上看,HotSpot也不支持(由于同样的分代GC原因)。

需要注意的是:今天进行钉住内存的JVM明天可能就不会钉住,反之亦然,因此您需要编写代码以处理两种情况,就像基本的Java库一样。


2

Shanandoah 在 OpenJDK 12 中作为实验性功能已经可用。 - Aleksandr Dubinsky
Shenandoah在Java 15中达到GA。 - Aleksandr Dubinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接