Java 12特性冻结,但原始字符串字面量特性被移除

JDK12引入了增强的switch语句预览、G1垃圾回收器改进及Shenandoah实验性垃圾回收器。原计划的原始字符串字面量特性因设计考虑被暂时移除。Switch表达式支持新的书写形式和表达式返回值。G1垃圾回收器通过调整收集集合策略以更好地控制停顿时间,并自动释放未使用内存。Shenandoah垃圾回收器采用Brooks前向指针,减少停顿时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK 12是Java SE的下一个版本,已经到了版本发布流程的第一个减速点(ramp-down point),该版本的特性已被冻结。 JDK 12提供了增强的switch语句的预览,为G1垃圾回收器添加了许多改进,并新引入了一个名为Shenandoah的实验性垃圾回收器。

但是,JDK 12主要提案之一的原始字符串字面量(raw string literals)却被从这个版本移除了。 根据JEP,“原始字符串字面量可以跨多行源代码,并且里面的转义串不会被解析,例如\\ n,或者像\\ uXXXX形式的Unicode转义”。 所以,你不再需要这样写:

String html = \u0026quot;\u0026lt;html\u0026gt;\\u0026quot; +              \u0026quot;    \u0026lt;body\u0026gt;\\u0026quot; +              \u0026quot;\t\t    \u0026lt;p\u0026gt;Hello World.\u0026lt;/p\u0026gt;\\u0026quot; +              \u0026quot;    \u0026lt;/body\u0026gt;\\u0026quot; +              \u0026quot;\u0026lt;/html\u0026gt;\\u0026quot;;

而是应该写成下面这样:

String html = '\u0026lt;html\u0026gt;                   \u0026lt;body\u0026gt;                       \u0026lt;p\u0026gt;Hello World.\u0026lt;/p\u0026gt;                   \u0026lt;/body\u0026gt;               \u0026lt;/html\u0026gt;              ';

“…我们认为基于当前的状态提供预览会对Java语言不利”,Brian Goetz在一封电子邮件中写道:

我们当然感到失望,因为这意味着这个特性需要更长一点时间才能变成Java语言的一部分,但我们认为这是最佳选择。

虽然我们可以预料到,任何语言特性都会收到大量诸如“我更希望它不是这样的”的反馈,在我们审查收到的反馈时,我不再确信我们在复杂性和表现力(expressiveness)之间作出了正确的权衡,或者说我不确信我们已经对所有可能的设计进行了足够的探索,以确保当前的方案是我们能做出的最优方案。 通过移除这个特性,我们可以继续完善设计,探索更多选项,以便可以提供一个能满足预览特性流程(Preview Feature process,JEP 12)要求的预览。

就已添加的新特性而言,我们前面提到的JEP 325:Switch Expressions是JDK 12的一个预览特性。 在这个JEP中,Java switch语句有两个主要变化。 一个变化是新的switch书写形式,写成“case L - \u0026gt;”表示如果标签匹配成功,则只执行标签右侧的代码:

switch (day) {    case MONDAY, FRIDAY, SUNDAY -\u0026gt; System.out.println(6);    case TUESDAY                -\u0026gt; System.out.println(7);    case THURSDAY, SATURDAY     -\u0026gt; System.out.println(8);    case WEDNESDAY              -\u0026gt; System.out.println(9);}

另一个变化是switch可以成为一个表达式,因此它可以有值,或者它可以返回一个值:

T result = switch (arg) {    case L1 -\u0026gt; e1;    case L2 -\u0026gt; e2;    default -\u0026gt; e3;};

JDK 12还对G1垃圾回收器进行了一些重要的增强。 G1的目标之一是当回收器造成停顿时,能达到用户指定的停顿时间目标。但在某些情况下,回收器可能无法达到这个目标。 发生这种情况是因为G1使用一组启发式算法来选择在收集期间要做的工作,这些工作被称为收集集合(collection set)。目前,G1需要从所有收集集合区域中收集所有活动对象,并且在此过程中不能停止。 因此,如果回收器的启发式算法选择了过大的收集集合,回收器可能会超出暂停目标。选择过大的收集集合这种情况是可能发生的,比如应用程序行为发生了改变而启发式算法仍然工作在“旧”数据上。

为了达到用户提供的停顿时间目标,JEP 344通过把要被回收的区域集(混合收集集合)拆分为强制和可选部分,使G1垃圾回收器能中止垃圾回收过程。 G1可以中止可选部分的回收以达到停顿时间目标。

G1的另一个问题是它并不总是及时地将已提交(committed)的Java堆内存返还给操作系统,因为G1只在完整GC或并发周期内从Java堆返还内存。 JEP 346指出:

由于G1尽量避免完整的GC,并且仅基于Java堆占用和分配活动来触发并发周期,因此在许多情况下,除非从外部强制执行,否则它不会返还Java堆内存。

在资源需要付费使用的容器环境中,这种行为对客户尤其不利。

该JEP的既定目标是增强G1垃圾回收器,使其在空闲时自动将Java堆内存返还给操作系统。

除了对G1的增强之外,JDK 12还增加了一个名为Shenandoah的新的实验性垃圾回收器,它在Java线程运行的同时进行转移(evacuation)工作来减少停顿时间。

Shenandoah由Red Hat开发。 它是一个标记/复制回收器,在许多方面与G1类似。 主要区别在于回收器在转移阶段使用Brooks前向(forwarding)指针。 其想法是堆上的每个对象都有一个额外的引用字段。 该字段初始时指向对象本身,一旦对象被复制到新位置,它就指向新位置。 这使得它可以在应用线程执行的同时转移对象。

Shenandoah的停顿时间与堆大小无关,但回收器会带来性能损失,因此它对于堆较大的应用程序更有用。 论文PPPJ2016对该算法进行了深入描述。

JDK 12的其它新特性包括:

  • JEP 334:提出一个API来对关键类文件(key class-file)和运行时构件(artefact)的名义描述(nominal description)进行建模,特别是那些可以从常量池加载的常量。该API的草案可在此处获得。

  • JEP 230:一套微基准测试,可以基于Java Microbenchmark Harness(JMH)轻松测试JDK的性能。

  • JEP 340:JDK中针对ARM 64-bit有两套不同的源码(即移植)。一套是arm64,来自Oracle;另一套是aarch64。该JEP将删除与arm64 port相关的所有源码,同时保留32位ARM 移植和64位aarch64 移植。

  • JEP 341:类数据共享(Class Data-Sharing,CDS)是一项减少启动时间的特性。JEP提到,由于共享,运行HelloWorld的启动时间缩短了32%。但是,若想利用类数据共享,用户必须额外运行一步java -Xshare:dump,即使使用JDK中默认提供的类也不例外。使用该JEP,默认将生成类数据共享存档。

JDK 12的候选发布版本预计将在2月初发布,GA版本将于3月中旬发布。

查看英文原文:

https://www.infoq.com/news/2018/12/jdk-12-new-features

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值