slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
Java 提议将降低 GC 延迟
17611538698
webmaster@21cto.com

Java 提议将降低 GC 延迟

编程语言 0 1485 2022-02-10 11:16:27

提案将在默认 GC 中实现区域固定,以便 Java 线程永远不必等待垃圾收集操作完成。

图片


Java 垃圾收集的概念:


通过删除未使用的对象来重新分配内存。此功能将通过开发Java 标准人员思考的提案中改进。


图片



OpenJDK Java 社区中提出的JDK 增强提案 (JEP:https://openjdk.java.net/jeps/423)呼吁通过将区域固定到 G1(垃圾优先),以减少垃圾收集器的延迟,Java 本地接口 (JNI) 关键区域期间不必禁用收集。该计划的目标如下:


  •  JNI 关键区域,不会导致线程停止。

  • JNI 关键区域,启动垃圾收集没有额外延迟。

  • 当没有 JNI 关键区域处于活动状态时,GC 中的最小回归暂停时间。

  • 当没有关键 JNI 区域处于活动状态时,GC 暂停时间没有回归。


支持此提案的人员指出,为了与 C 和 C++ 等非托管编程语言的互操作性,JNI 定义了获取和释放指向 Java 对象直接指针的函数。这些函数必须成对出现:首先,获取指向对象的指针;然后,在使用对象后,指针释放。


这样的函数对中的代码被认为是在临界区中运行的,使用的Java对象就是临界区。当 Java 线程处于临界区时,JVM 在垃圾回收期间不得移动关联的临界对象,本质上是在 GC 移动其他对象时将它们锁定在适当的位置。当线程处于临界区时,JVM 可能会禁用 垃圾回收 GC。


默认的 GC,G1将采用后一种方法,在每个关键区域禁用收集,这会显着降低延迟。根据正在考虑的提议,Java 线程将不会再等待 G1 GC 操作完成。该提案的目标将通过在主要和次要收集操作期间扩展 G1 以固定任意区域来实现。


该提案假定 JNI 关键区域的预期使用不会发生变化;它们将继续被谨慎使用并且持续时间较短。当应用程序同时固定多个区域时,存在堆耗尽的风险。目前还没有解决方案,但是Shenandoah GC在 JNI 关键区域期间锁定内存区域并且没有这个问题的事实表明这对于 G1 来说不是问题。


该提案目前没有引用可能引入此功能的 Java 版本。


标准 Java 的下一个版本JDK(Java Development Kit)18将于 2022年3 月 22 日发布,其功能集已被冻结。而JDK 19 会在 9 月发布。


来源:Oracle官网,21CTO

评论