Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

Java 8 发布 Q&A

  • 2014-03-27
  • 本文字数:3087 字

    阅读完需:约 10 分钟

多年以来,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 开发者工作的事情。

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

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

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

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

InfoQ**:Java 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 5**、67Java开发者比例?在加速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

2014-03-27 20:372684
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 126.4 次阅读, 收获喜欢 33 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营-毕业设计

Beyond Ryan

MySQL最全基础大整理(建议收藏)1️⃣

XiaoLin_Java

1月日更

关于看板方法,你需要知道的几件事

华为云开发者联盟

敏捷 敏捷开发 软件开发 团队 看板方法

i人事CTO王景飞:i人事+计算巢,协同赋能HR业务

阿里云弹性计算

阿里云 计算巢

StreamNative 联合传智教育推出免费 Apache Pulsar 中文视频教程

Apache Pulsar

大数据 开源 架构 云原生 Apache Pulsar

安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!

王磊

一通百通,带你一次性全理解Spring 中的Template

华为云开发者联盟

spring 设计模式 流程 template 模板模式

sqoop如何指定pg库的模式

华为云开发者联盟

大数据 hadoop sqoop 数据 PG库

征文投稿丨使用轻量应用服务器部署Hadoop云集群

阿里云弹性计算

hadoop 轻量应用 征文投稿

用11本白皮书搭建3座桥:联想企业科技集团让智能化转型不再有孤岛

脑极体

Kubernetes 下部署 JMeter 集群

zuozewei

Jmeter 性能测试 1月月更

Go 语言快速入门指南:Go 测试

宇宙之一粟

Go 测试 Go 语言 1月月更

低代码实现探索(二十八)目录模块文件组织方式

零道云-混合式低代码平台

【网络研讨会】“专家面对面”-MongoDB模式设计

MongoDB中文社区

mongodb

软件架构治理与混沌工程

码猿外

架构设计 混沌工程 软件架构治理

Flink 实践教程-进阶(7):基础运维

腾讯云大数据

flink 实战 流计算 Oceanus

哲元科技×飞桨EasyDL|助力世界500强企业打造“灯塔工厂”,探索智能制造星辰大海

百度大脑

流计算 Oceanus | Flink JVM 内存超限的分析方法总结

腾讯云大数据

flink 实战 流计算 Oceanus

navie ui/antDesign vue 的按需自动引入

Mr.Cactus

Vite2 vue3.2 antDesign vue naive ui

JDK动态代理

Java

快捷式数据分发在银行反洗钱中的运用

明道云

这一年很幸运,平平淡淡的|2021 年度总结

看山

年度总结 1月月更

原来还能这么干——罗胖2022年《时间的朋友》观后感

看山

1月月更 时间的朋友 你好2022

消息队列 RocketMQ 遇上可观测:业务核心链路可视化

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 可观测

架构实战营-毕业设计

Beyond Ryan

macOS下 Hive 2.x 的安装与配置

JavaEdge

1月月更

21 Prometheus之OpenStack的监控简述

穿过生命散发芬芳

Prometheus 1月月更

最好用的 7 款 Vue 3 富文本编辑器

蒋川

Vue 3 富文本编辑器

Spring隐藏了真实的错误,让排查问题变得很难

看山

Mybatis-Plus 1月月更 spring-boot NoClassDefFoundError

人人都会设计模式:策略模式

看山

算法 设计模式 策略模式 1月月更

kube-controller-manager源码分析 目录导航

良凯尔

Kubernetes 源码分析 云原生 #Kubernetes#

  • 扫码加入 InfoQ 开发者交流群
Java 8发布Q&A_Java_Matt Raible_InfoQ精选文章