三个新JEPs提案:字符串模板、 顺序集合和Project Liliput


JEP 431:Sequenced Collections
一个可能会引起广大读者兴趣的候选JEP是JEP 431:有顺序的集合
顾名思义,它为保留元素顺序的集合提供了一个通用接口。
新的接口旨在提供一种标准化的方式来选择一个集合的第一个和最后一个元素。

void addFirst(E)
void addLast(E)
E getFirst()
E getLast()
E removeFirst()
E removeLast()

现有各个Collection集合的接口也将被扩展,并且上述每个方法都将采用默认实现。

字符串模板
目前正在广泛研究的另一个 JEP 是JEP 430:字符串模板(String Templating预览版)
这种功能几乎存在于其他所有的JVM语言中。经过多年对文本块的微调,下一步是使其更加动态。开发者提出了以下的语法:

String name = "Joan";
String info = STR.
"My name is \{name}";
assert info.equals(
"My name is Joan");   // true

其中STR是所谓的字符串模板处理器,自动导入任何Java文件中。

Project Liliput:64 位对象头
Liliput 的目标是将 Hotspot JVM 中 Java 对象头的大小从 128 位减少到 64 位或更少。

这是因为现在:每个对象,无论大小,在理论上都有128比特的固定开销,在实践中则是96比特(启用了头的压缩)。在这个空间中,有指向对象的指针,它的哈希码,以及与垃圾收集器或锁有关的数据。
128位看起来并不是一个显著的内存开销。然而,应该记住,我们谈论的是头,它被添加到每个对象中。在许多应用中,例如,当许多微小的对象被创建时(开发者引用了机器学习的例子),这种开销变得非常重要。
开发者现在已经实现了64位头,代价是减少了可能的哈希码复杂性和其他一些优化。
上面提到的JEP包含了具体哪些部分被减少的细节,以及这些变化可能对例如Valhalla的未来发展有什么影响。

文献: