搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 码上打卡 > JDK 12 Beta版:抢先关注Java 12可能的新特性

JDK 12 Beta版:抢先关注Java 12可能的新特性

码上打卡 2019-02-10
举报

在哪边下载JDK 12 Beta版

下载网址:【https://jdk.java.net/12/】。

开源版本,旨在收集反馈,可能有一些功能不会在正式版本中出现,以2019年3月19日正式发版为准。该beta版可能会缺少安全补丁及甲骨文官方也不会提供后续支持。

计划发布的Java 12新特性

Shenandoah垃圾收集器

Shenandoah,一个实验性的垃圾收集算法,加入该算法是通过同时执行疏散工作和运行Java线程来减少垃圾收集停顿时间。Shenandoah为判断应用的值的可响应性和短暂停顿的可预测性提供了合适的算法。即使如此,但并没有修复所有的JVM中停顿问题。

Red Hat现在在系统架构Aarch64和AMD64上支持了Shenandoah。

可抛弃混合收集的G1垃圾收集器

如果G1垃圾收集过度使目标停顿,该修改提议将使G1可抛弃混合收集。G1的目标是使垃圾收集停顿变成一个用户选项,用户可以根据目标设定停顿时间。

近日,一个高级的分析引擎在一个收集器中完成了很多测试工作。结果是在一个集合簇中,一旦该簇被确定,收集器开始工作,G1必须收集所有在该区域活跃的对象,且不会停止。如果应用启发式的选择一个太大的集合簇,这会导致G1有过度的停顿时间。

对于收集器,其不断重复选择不正确的工作量,这就需要一个机制来发现该问题。如果这种情况发生,G1让收集工作逐步递增,在过程中收集器每一步能被释放。该机制将能使G1经常达到预期的停顿时间目标。

无用内存的即刻返回

在该提议下,G1,当空闲时,将加强自动返回堆内存给操作系统。在应用活跃度底的时候,这些内存将在合适的时间段被释放。

G1现在的做法不是这样的。内存从堆上只在垃圾收集器满的时候或者在一个并行的周期时返回。由于G1避免垃圾回收器满的情况,除非在堆占用和分配活动的基础上触发并行周期,在大部分情况下,它不会返回堆内存。除非强制做这件事。这种行为在资源被耗被用的容器环境内是没有好处的。即使当虚拟机在不活跃的时候只用了分配内存的一部分,G1也会保持满堆状态。因此,客户总是满负荷状态,云提供商也不能充分利用他们的硬件。

如果有一种探测机制,虚拟机可以探测堆未被充分利用的阶段,在该阶段,自动减少堆的使用。这就是该条修改提议所带来的益处。

Java虚拟机常量API

这个Api将会是键类和运行时构件的名义模型描述,特别是常量池中的可加载常量。这个修改建议定义了一个基于值的符号家族,从一个新包里引用类型,包为:java.lang.invoke.constant。该符号家族描述每一种可加载常量。

常量池存在于Java的每个类,用来存储类中的操作对象和字节码说明。常量池中的词目不但描述像类和方法这样的运行时构件,也描述像字符串和整数这种简单的值。这些词目就是可加载常量。

这样,如果他们操作类和方法,或者操作一些鲜少用的构件,如方法柄和动态计算常量或其名义上的符号形式,在编程中面对可加载常量时就更简单。对于描述可加载常量中,类库和工具将从单一的标准中获益,这就是要加该API的初衷。

启动、类数据共享和垃圾回收器的改善

计划要求改进JDK构建过程,以生成默认的类数据共享存档,使用既有的64位平台上的类列表。目标是包括开箱即用启动时间和消除运行-Xshare:dump命令以从类数据共享获益的需要。计划要求修改JDK构建以运行java-xshare:dump 在链接的图片之后。

额外的命令行选项可能包含调整垃圾收集器堆时间以对通常情况改善内存层级。一些用户有更加高级的需求,像包括应用类的定制类列表,可配置的垃圾收集器,将依然能够创建一个定制的类数据共享文档。

减少ARM端口的数量

Java 12将只有一个端口,原来对ARM处理器有两个。保持32位ARM和64位aarch64的同时,计划将移除所有与arm64端口相关的资源。端口的移除能使开发贡献者聚焦努力在一个单64位ARM中的实现,它也消除了维护两个端口重复的工作。当前,在JDK中有两个64位端口。

Switch表达式

beta版中的switch表达式的功能将简化编程,switch可以用在一个声明中,也可以用在表达式中。这将能使用两种方式,传统的或简化的域和控制流的行为。这些改变的好处将在每天的编程中体现,它也为switch中模式匹配的使用铺平了道路。

由于Java构建器转而支持模式匹配,已存在的switch声明的不规则行为就成为了阻碍。这些包括默认的switch块的控制流行为;switch块的默认域,这个域中该块被当作一个单域;switch只能作为一个声明。控制流对于写在低层级的代码是有用的。不过switch用在更高的上下文中,它易出错的特性就开始超过灵活性。

生字符串

关于beta版本对生字符串的处理是字符串可以跨多行写在代码中,而不被编译成带换码顺序的字符,如\n,或者未编码,/uXXX这样的形式。Java构建者们关于生字符串有以下几个目标:

  • 更容易的表达字母的顺序,以一种更可读的形式。

  • 使字条串可以跨行写而不必要加一些换行符号。

  • 除了特定平台的行终止符之外,能够表示与传统字符串文本相同的字符串。

  • 类库支持复制当前的java字符串编码解析,以及管理左边界trim。

JAVA12的开发者说Java编码世界需要一个获取字符串的机制,而不需要加特殊的反编码,反斜线或者新换行。生字符串把escape和Java终端终止符扔掉,提供一个在很多环境的字符顺序,其比现有的字符串更可读,更易维护 。

Java现在是几个少数还不在语法层面支持生字符的语言之一。这个提议将不会介绍任何新字符操作符。生字符也不直接支持字符串插值。对于传统字符串插值将没有改变。

基础基准测试套件

JDK12 希望能有一个基准测试的基础套件加到平台源码中。目的是使开发者运行一个存在的和新建基准测试更容易。

微基准测试套件的提议,创建于2014年四月,在2018年11月升级,由JMH支持,用来创建JAVA或JVM语言写的基准测试。这个套件将会和JDK源码在一起,在一个单独的目录内以使开发者添加新基准测试更加方便。

为新JDK提供基准测试特性或者创建一个覆盖JDK一切的基准测试集不是目的。

这在计划中有风险,如增加构建时间,新基准测试潜在的测试不稳定性,增加源码包的质量。不过基准测试套件对一般JDK构建不是必需的,它将作为分开的构建目标。为了避免潜在的测试不稳定性,在新基准测试中做彻底的测试是必须的。

关于基准测试套件,要求在网站【https://wiki.openjdk.java.net/】创建一个新页面来解释怎么开发基准测试,以及要求描述。

注:该消息摘自《信息世界》,由码上打卡团队编译,如有错误,请联系修改。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《JDK 12 Beta版:抢先关注Java 12可能的新特性》的版权归原作者「码上打卡」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报