Java 11手册:新Java发布系列迈出的一小步,Java 8用户迈出了一大步

Java 11:废除Java 8是否足够重要?

为了庆祝Java 11的发布,我们邀请了9位Java专家与他们分享最新版本的最佳和最差体验。 由于本系列旨在作为Java 11的手册,因此我们的受访者谈论了他们对Java 11的第一印象,技巧和窍门,最聪明的黑客,如果他们真的在乎Java 11,则不可避免地要比对Java 8关心的多, 至少。

该系列即将结束,但在我们向专家询问最后一个问题之前,还没有结束:您对Java 11有多大兴趣? 这听起来可能很奇怪,所以这里有一些背景:在去年的JAX London上 ,我们与Stephen Colebourne谈论了当时的新发行节奏,以及人们为何仍使用Java 8的原因。一年又两个版本(Java 9发行了一个月)在采访之前),很多事情已经发生了变化,但是我们仍然在问同样的问题:最新版本是否足以使Java 8失效?

Java 8将使我们满意好几年,直到出现真正重要的东西为止。

斯蒂芬·科尔本

Java 11可以成为那个重要版本吗? 我们试图在两个月前回答这个问题,但是现在Java 11出现 ,是时候重新讨论这个问题了。 如果您想了解我们的Java影响者对最新版本的看法,请不要错过本系列访谈 。 只是为了让您了解其中包含的内容,以下是其中一位受访者的名言:

借助Java 11强制模块化,这将是许多项目的第一个真正的迁移里程碑。 现在,我们在如何使用模块系统以及如何在顶部迁移和构建新软件方面拥有相当多的经验。

Markus Eisele

会见专家

Mala Gupta( @eMalaGupta )是eJavaGuru.com的创始人。 她是DelhiJUG的Java冠军,书籍作者,演讲者和联合负责人。

Josh Long( @ starbuxman )是Pivotal的Spring Developer Advocate。 他是5本书和3本畅销视频培训的作者。 他还是Java冠军。

Lukas Eder( @ lukaseder )是Data Geekery GmbH的创始人兼研发主管,该公司是jOOQ背后的公司和Java冠军。

Matthew Gillard( @MaximumGilliard )在开源,Java和无服务器/云基础架构上为英国布里斯托尔的Oracle工作。

Marcus Biel( @MarcusBiel )是一位演讲者,作家,JCP成员和Java Clean Code的传播者。

Trisha Gee( @trisha_gee )是JetBrains的一名开发倡导者,是伦敦Java社区的重要成员和Java冠军。

Simon Ritter( @speakjava )是Azul Systems的副CTO。

Tal Weiss( @weisstal )是OverOps的CTO和联合创始人。

Stephen Colebourne( @jodastephen )是Java冠军和JavaOne摇滚明星发言人。 他在OpenGamma担任开发人员。

您是否在乎Java 11?

Mala Gupta:对于所有利益相关者来说,JDK 11是一个重要的版本。

JDK 11标志着Oracle向支持开源软件迈出了里程碑式的一步。 使用JDK 11,OracleJDK在功能上将等同于OpenJDK。 例如,OpenJDK现在包括以前仅在OracleJDK中存在的功能,例如“ Flight Recorder”。

JDK 11是Java 8之后的下一个LTS(长期支持)版本。大多数组织仍担心在Java 8上运行其应用程序,担心迁移到STS(短期支持)版本的Java 9或10。 借助Oracle的长期支持,预计许多组织将迁移到JDK 11。

较新的垃圾收集器和内存管理的引入正在鼓励组织进一步研究并推动这一领域的发展。

我更喜欢Java 11的稳定性。

约什长 :Java的8是一个划时代的版本是有一的巨大功能。 Java 11尚未达到这个导入水平,但由于我们已经每半年发布一次Java,因此我认为这不是目标。 如果您查看Java 9、10、11和12中的语言语法和API优点(除其他功能外,它们将支持多行字符串),但我仍然不能说它与Java 8一样重要。

相反,我更喜欢此版本的稳定性。 作为Spring开发人员,有零件事让我担心,而许多小事情将使我的生产生活更加轻松。 Spring Initializr 将支持它。 这是一个重新平台的好地方,我衷心希望每个人都能做到。

卢卡斯·埃德(Lukas Eder):一点 也不。 JDK 9 – 11对我来说并不是很有趣。 如前所述,由于我在jOOQ上的工作性质,我主要关心Java语言功能,而不是JVM或JDK功能。 话虽如此,我非常期待JDK 12 ,JEP 325和JEP 326(是的!)!

马修·吉拉德(Matthew Gillard): 是的,我愿意。 我认为这当然是非常重要的版本。 我在Java活动中与人们交谈的经验是,几乎没有人在生产中采用9或10,但是许多人希望将其直接从8升级到11。因此,在9、10和11中引入的好处将得到广泛传播。最后使用。

特别是,JVM在容器中的行为方式有了许多改进,并提供了一些不错的语言功能–本地变量类型的推断可能是最引人注目的–核心库的改进,例如新的HTTP客户端,使程序员可以真正实现现代基于CompletableFutures的编程风格。

Marcus Biel: 毫无疑问,它是比Java 8小得多的发行版,但是Java 11是朝着正确方向迈出的又一贯(婴儿)步骤。 例如,JEP 181为以后的Java发行版中的将来增强设置了方向。

现在必须回到Java 8时,我会想念Java 9、10和11中引入的所有这些小功能。

Trisha Gee: 是的,我希望团队/应用程序从Java 8迁移到11。去年我一直使用9、10,现在使用11(或者更多,因为我使用的是9的早期访问版本)我已经习惯了一些小的便利:集合的工厂方法(Java 9); var(Java 10); 不可变的集合(Java 10,以及Java 10中的Collectors.toUnmodifiableList等); 以及Streams API和Optional上的一些不错的小方法,只是使8中引入的某些东西变得更容易使用。 现在必须回到Java 8时,我会错过所有这些小功能。

Simon Ritter: 我很关心JDK 11,因为它是六个月发布计划中的第一个新的长期支持(LTS)版本。 我怀疑大多数Java用户都将从JDK 8迁移到JDK 11,因为Oracle以及其他诸如Azul和AdoptOpenJDK的用户将对此版本提供扩展的支持。

还请参见“开发人员会将Java 11视为他们在Java 8中使用的功能的更好,更干净的实现”

Tal Weiss: 肯定的。 我很高兴看到新的实验性ZGC实现正在运行,即使对于非常大的堆,它也有望实现低延迟垃圾回收。 还有其他有趣的新功能。 另一方面,我认为就发行规模而言,Java 11比Java 8或Java 9等以前的发行版要小得多,但这是一件好事。

Stephen Colebourne: 是的。 Java 11是重要的发行版,因为它将长期视为稳定的。 就像Java 8一样,它将通过OpenJDK接收Red Hat,IBM,Azul和其他公司的安全更新很多年。

如果您由于Java 9的困难而拖延时间,那么Java 11发行版将是您的目标。 请记住,为了超越Java 9,无需模块化代码!

Java 11回顾

Trish Gee:由于Java 11的更改,我使用的某些旧版本库不再可用。 例如,我发现了缺少类文件的运行时错误问题。 有两件事使我的生活更轻松-确保我使用的依赖项是最新版本; 并为已移出核心库(在我的情况下为JAXB)的API添加其他依赖项。

Simon Ritter:由于JDK 11中开发人员功能的数量相对较少,我尝试过的任何事情都没有给我带来任何问题。 新功能的文档非常好,因此我尝试过的所有东西都在第一次尝试时就起作用了。

迄今为止发现的最聪明的黑客

Matthew Gillard:带有shebang行的单源文件启动器非常简洁-我将其与新的EpsilonGC结合使用来编写用例脚本:

#!/opt/jdk/jdk-11/bin/java --source 11 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
	public class MyClass {
  	public static void main(String... args){
  	...

Tal Weiss:我真的很喜欢JEP 330的实现,该实现允许通过命令行使用Shebang语法非常快速地对Java代码进行原型制作,而无需经历构建链。 我认为这对于通用脚本和语言学习也非常方便。

优点缺点

优点

+使用HTTP客户端处理非阻塞异步代码

+对lambda参数使用带局部变量的注释

+ TLS 1.3 真正快速的周转集成

+对ChaCha20和Poly1305加密算法的新支持

+比Java 9和10更好的启动性能

+ 字符串API增强功能(重复,isBlank,条带,行)非常酷

+过时的功能被抛出

+升级时影响较小

+使用启动单文件源代码程序

+对谓词接口的微小更改,添加了not()静态方法

缺点

–在不编译的情况下启动单个源代码程序会造成混乱

–对程序员几乎没有

–根据此版本中不推荐使用的位,可能给这些用户带来不便

–已从JDK 11中的JDK中删除了JAXB。这在首次设置jOOQ时会给jOOQ用户带来一些额外的配置麻烦。

–启动仍可与Java 8媲美

Java 11的17个功能

为了刷新您的记忆,JDK 11包含以下功能

引入nests ,这是一种与Java编程语言中嵌套类型的现有概念一致的访问控制上下文。 嵌套允许类在逻辑上属于同一代码实体,但被编译为不同的类文件,可以访问彼此的私有成员,而无需编译器插入可访问性增强的桥接方法。

309:

扩展Java类文件格式以支持新的常量池形式CONSTANT_Dynamic 。 加载CONSTANT_Dynamic会将创建委托委派给bootstrap方法,就像将调用动态调用站点链接到bootstrap方法一样。

315:

改进现有的字符串和数组内部函数,并在AArch64处理器上为java.lang.Math sin,cos和log函数实现新的内部函数。

318:

开发一个可以处理内存分配但不实现任何实际内存回收机制的GC。 一旦可用的Java堆耗尽,JVM将关闭。

320:

从Java SE平台和JDK中删除Java EE和CORBA模块。 这些模块在Java SE 9已弃用,声明要在将来的版本中删除它们。

321:

通过JEP 110标准化JDK 9中引入的,在JDK 10中更新的已孵化的 HTTP客户端API。

323:

在声明隐式类型的lambda表达式的形式参数时,允许使用var

324:

RFC 7748中所述,使用Curve25519和Curve448实现密钥协议。

327:

升级现有平台API以支持Unicode标准 10.0版

328:

提供低开销的数据收集框架,用于对Java应用程序和HotSpot JVM进行故障排除。

329:

实现RFC 7539中指定的ChaCha20和ChaCha20-Poly1305密码。 ChaCha20是一种相对较新的流密码,可以代替较旧的,不安全的RC4流密码。

330:

增强Java启动器以运行作为Java源代码的单个文件提供的程序,包括通过“ shebang”文件和相关技术从脚本内部使用该程序。

331:

通过JVMTI提供一种低开销的Java堆分配采样方法。

332:

实现传输层安全性(TLS)协议的1.3版。

333:

Z垃圾收集器(也称为ZGC)是可伸缩的低延迟垃圾收集器。

335:

弃用Nashorn JavaScript脚本引擎和API,以及jjs工具,以在将来的发行版中删除它们。

336:

java.util.jar弃用pack200unpack200工具以及Pack200 API。

翻译自: https://jaxenter.com/manual-java-11-series-part-4-150512.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值