Java开发工具包(JDK)28作为标准Java的非长期支持(LTS)"特性版本",预计于2027年3月发布,目前已开始逐步成型。当前已列入JDK 28的功能包括:值对象预览、将Shenandoah垃圾回收器的默认模式切换至分代模式,以及Java虚拟机(JVM)中严格字段初始化预览。

作为非LTS版本,JDK 28将由Oracle提供六个月的支持服务。

目前已确定纳入JDK 28的三项功能具体如下:

引入值对象

值对象具有不可变性且不具备对象标识。值对象通过字段值加以区分,JVM可采用有助于提升性能的方式对其进行表示。该特性的目标是为开发者提供一种不可变数据的编程模型,使==运算符及所有其他操作均通过字段值而非对象标识来区分对象。值对象属于语言与JVM的预览特性。

切换Shenandoah垃圾回收器的默认模式

将Shenandoah垃圾回收器(GC)的默认模式切换为分代模式,并废弃非分代模式,未来版本中将予以移除。此举旨在明确未来开发将聚焦于分代模式,同时降低同时维护两种模式的成本。需要说明的是,本次并不会立即移除非分代模式。

在JVM中引入严格初始化字段

此类字段在被读取之前必须完成初始化,因此不会出现0或null等默认值。对于被声明为final的严格初始化字段,每次读取到的值始终一致。该特性旨在为基于JVM的编程语言设计者提供一套字段初始化模型,其完整性保证强于现有模型。这是一项JVM预览特性。

JDK 28的前序版本JDK 27预计于9月15日发布。JDK 27同样是非LTS版本,将由Oracle提供六个月的支持服务。

Q&A

Q1:JDK 28预计什么时候发布?是长期支持版本吗?

A:JDK 28预计于2027年3月正式发布,属于非长期支持(非LTS)的"特性版本",Oracle将为其提供六个月的支持服务,而非像LTS版本那样提供多年支持。

Q2:JDK 28中的值对象有什么用?

A:值对象是JDK 28引入的一项预览特性,其核心特点是不可变且不具备对象标识,JVM可通过更高效的方式表示值对象,从而提升性能。对于开发者而言,值对象提供了一种新的不可变数据编程模型,==运算符等操作将基于字段值而非对象标识来区分对象。

Q3:Shenandoah垃圾回收器在JDK 28中有哪些变化?

A:在JDK 28中,Shenandoah垃圾回收器的默认模式将从非分代模式切换为分代模式,非分代模式同时被标记为废弃,并计划在未来版本中移除。此次变更的目的是明确未来开发方向将集中于分代模式,并降低同时维护两种模式所带来的维护成本,但本次版本暂不会直接移除非分代模式。

InfoWorld