BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Java 8发布Q&A

| 作者 Matt Raible 关注 12 他的粉丝 ,译者 臧秀涛 关注 4 他的粉丝 发布于 2014年3月28日. 估计阅读时间: 10 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

多年以来,Java 8一直是最受期待的编程语言更新之一。这次发布的版本包含了日期API、Streams API和Lambda。包括移除永久代(permgen)在内,还有一些不错的改进。为了解该版本的更多信息,我们采访了Oracle Java 平台组的软件开发副总裁Georges Saab

InfoQ:对于我们中那些没有紧跟Lambda项目的人,你可以就实现中涉及的内容给我们提供一些概念吗?我想这是Java语言、虚拟机和类库第一次这么协调的演进。

之前版本中,很多较大的特性都只影响了语言、虚拟机和类库这三个领域中的某一个,或者是另一种情形,每个领域的改变都是经历了一系列主要版本才引入的。

借助Java 8中的Lambda,我们协调地对语言、类库和JVM进行了修改,在开发过程中,每个领域都能够影响和增强其他领域的设计与实现。

例如,我们在JVM上实验了Lambda的不同备选方案,发现可以使用InvokeDynamic。这个过程中我们发现可以通过InvokeDynamic加以改进。以自然的方式结合使用Lambda和集合类,这种期望引出了Streams API的设计,扩展方法也由此而来,而扩展方法又需要语言方面的支持。

这是一个历经多年的演进过程,期间也有大量来自社区的极佳的反馈。

InfoQ:你认为Lambda的加入会把GroovyScala开发者带回Java语言吗?

有趣的是你提到的这两种语言(还有很多其他语言)都运行在JVM上。实际上为支持Java 之外的语言运行在JVM上,我们做了很多工作。而且我们认为,对语言实现者而言,哪些东西在JVM上表现很好,哪些表现不好,这方面的经验他们还有很多要学的。当然实验小众语言比实验大众语言要容易得多。我们真正关注的是以深思熟虑、负责任的方式解决能够改进数百万Java开发者工作的事情。

InfoQLambdaStreams API的结合可以帮助我们开发清晰简洁的代码,但是像在过滤器后面跟一个过滤器这样以函数式方式缩减一个集合的范围,人们已经表露了对潜在的性能问题的担忧。这种担忧合理吗?为缓解这种开销引入了什么优化吗?

Stream支持中间操作(intermediate)和最终操作(terminal)。像过滤器这样的中间操作实际上本身不执行任何过滤,相反,它们会创建一个新的Stream,而这个Stream会在被遍历到时提供被过滤Stream中匹配给定谓词的元素。因此,一方面,创建额外的过滤器可能会致使运行时执行额外的工作。

另一方面,惰性处理Stream,像所有中间操作都在Stream上做处理,会带来很高的效率,比如多个操作可以合并到对数据的一遍处理中。结合底层强有力的JVM优化——Lambda在设计时也是仔细考虑过支持JVM优化的,额外的过滤器的潜在影响会明显减少。

另一个需要考虑的是,通过Stream和Lambda,可以更轻松地使用并行。此外,对于用户不是特别关心其相交顺序的Stream,减轻其顺序约束对并行Stream上的操作可能有好处。

InfoQJava 8的另一个重要特性是Java类型上的注解支持开发可插入式的类型检查器。你能多介绍一下吗,比如你希望看到开发者使用该特性来处理哪类任务?

该特效支持在类型的名字上使用注解,可以使用这些类型的大部分地方都可以使用这种注解。作为这一变化的一个结果,开发者可以编写注解,使用可插入式的类型检查器在编译时探测错误条件。社区正在为空指针错误、锁和国际化问题开发这样的检查器和注解模式。

Prof. Michael Ernst教授的Checker框架(checker-framework.org)是这方面信息和实现的一个很好的参考,该框架提供了十多个这样的工具,其中一个是用于检查空指针的检查器。Michael也担任过JSR 308的联席领导者,该语言特性就是在JSR 308中指定的。

如果能够看到至少有一个这样的注解机制在将来应用到JDK代码库中,我会很开心。而且当然,如果更广大的Java开发者社区开始在他们自己的代码库中使用该技术,并为解决其软件质量问题开发新的检查器,也会让人非常欣慰。

特别是在有关嵌入式和对安全要求很高的系统中,这种新方法允许在类型上加上重要属性和约束,而且这些属性和约束的使用可以用作编译过程的一部分,还可以同时进行静态分析。这为其他领域相关编程语言的用户在将来迁移到Java平台提供了一条途径。

InfoQ:你认为在Java 8中对动态语言的最大增强体现在哪里?

那一定要说HotSpot VM中的性能改进了,特别是围绕invokedynamic所做的工作。JDK 8一个重要的新特性是Nashorn JavaScript引擎,这是一种流行动态语言的一个轻量级、高性能的实现。改进Nashorn的性能,帮我们在虚拟机中优化动态语言实现找到了新的机会。

此外,Nashorn现在提供了一种非常方便的在JavaScript中使用Java的方式,支持以JavaScript编写完整的JavaFX应用,并运行在JVM上。运行在JVM上的动态语言和Java之间那种透明的互操作性为编写这样的应用提供了一种强有力的方式。

InfoQ:对Java和安全的担忧几乎一直是去年的头条新闻。Java 8Java浏览器或其他地方有具体的改进吗?

很多重要的安全改进和新特性已经作为Oracle Java SE 7更新的一部分交付了,包括部署规则集(Deployment Rule Sets)和异常站点列表(Exception Site Lists)。维护Java的安全是我们的第一要务。

此外,Java SE 8包含了一些新的安全特性。最明显的可能是传输层安全(Transport Layer Security)实现的增强:现在平台默认支持TLS 1.2。除了全面的安全API,还有很多其他增强,包括从证书撤销检查改进到新的加密算法。

InfoQ:你是否知道使用 Java 567Java开发者比例?在加速Java 8的采用方面有什么计划吗?

在过去的6至9个月,我在世界各地的会议上发表过演讲,每次我都会问人们正在使用哪个版本。基于这种非正式且不够科学的调查,大部分Java开发者目前在使用Java SE 7,仍在使用Java 6的明显属于少数(但不可忽略),还有少数人使用更老的版本。从开发者的角度看,Java SE 8以新的语言特性和API的形式为快速采用带来了充足的理由。随着像NetBeans、Eclipse和IntelliJ IDEA等IDE努力在即将发布的版本中提供支持这些特性的良好工具,我预计开发者会快速拥抱Java SE 8。

InfoQ:去年的JavaOne,最大的主题之一就围绕Java MESEEE的统一。Java 8在这个方向上走到什么程度了?

在Java SE 8的众多特性之中,有一个特性就是支持紧凑配置(Compact Profiles)。它们定义了Java SE平台规范的一些子集配置,支持部署不需要完整平台、运行在小型设备上的应用。结合HotSpot中的其他改进,比如减少类的元数据的内存占用,以及从整体上减少虚拟机内存占用,该特性支持JDK 8针对小型设备上的应用开发与部署按比例缩减。为进一步简化这一点,JDK 8中包含了一个新工具jdeps,支持开发者找出其代码依赖的配置。

而另一个方向,Java ME 8也正在增强,包含的语言特性、虚拟机和类库更为接近Java SE 8了。尽管你不能马上在Java ME 8代码中使用Lambda,但是该平台现在支持Java SE 5、6和7中引入的语言构造,比如断言、泛型、枚举、在switch中使用字符串、try-with-resources语句和菱形操作符。类似地,核心类库也做了更新,支持现代Web协议,像IPv6,也支持高级安全特性,包括支持TLS 1.2。与过去相比,Java SE和Java ME两个平台走得更近了。

InfoQ:何时能看到Stripped Implementations加入Java中?

在Java SE 8发布之后,我们需要再看一下如何将该特性在Java SE 9之前的某个版本加入到平台中。这并非技术问题,而是事关如何确保规范文本和相关法律框架支持相应的用例,同时避免Java平台分裂。

非常感谢Georges回答我们的问题。Oracle会通过 网络直播方式正式介绍Java,届时InfoQ还会进行相关报道。

查看英文原文:Java 8 Launch Q&A

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

java发展太慢了 by jiang jianbo

和C#的速度根本没法比,发展到现在还越来越丑了。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT