写点什么

Java 8 新闻:发布候选版面世、新的原子数、放弃简易实现(Stripped Implementations)

  • 2014-02-18
  • 本文字数:1519 字

    阅读完需:约 5 分钟

Java 8 的第一个发布候选版(RC)已于 2 月初面世。第一个发布候选版 b128 是 2 月 4 日发布的,第二个版本则于一周后在 OpenJDK 邮件列表中宣告问世

Java 8 RC2 修复了新的 Comparator API 中的一个严重缺陷——新的 _thenComparing()_ 方法有一个不必要的类型约束。 bug 报告指出:

在 java.util.Comparator 中,下面的方法要求类型 U 扩展 java.lang.Comparable。

复制代码
<U extends Comparable<? super U>> Comparator<T> thenComparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator);

但是这一约束是不必要的,因为 keyComparator 用于比较的是提取出的 key 对象。

Java 8 RC2 还修复了在 Mac OS X 上的一个读权限问题。发布候选版可以从 https://jdk8.java.net/download.html 下载。

根据 JDK 8 的 bug 跟踪系统上的信息,Java 8 将于 3 月 17 日圣帕特里克节这天发布。截至本文写作时,还有 3 个问题尚未解决,都与文档有关。

在其他与 Java 8 有关的新闻中,Drew Stephens 最近发布的数据表明,Java 8 的原子数实现快了很多。此外,出于法律方面的原因,Mark Reinhold 提议放弃简易实现(Stripped Implementations)。

新的原子数实现

除了 Lambdas( 335 )和新的日期与时间 API( JSR 310 ),Java 8 还包含了对特定的多线程应用类非常重要的原子数实现。Palamino Labs 的负责人 Drew Stephens 最近撰文谈到了 LongAdder 和 DoubleAdder 的引入

尽管 LongAdder DoubleAdder 的引入不是那么光彩夺目,但是对于特定的多线程应用类而言,非常重要。这两个原子数实现在多线程竞态条件下提供了比 AtomicInteger AtomicLong 更好的性能。

一些简单的基准测试就能说明其性能差别,下面的基准测试,我们使用了一个 m3.2xlarge EC2 实例,它可以访问一个 Intel Xeon E5-2670 处理器的全部 8 个核心。

在单线程条件下,新的 LongAdder 会慢 1/3,但是当多个线程竞争着增加字段时,LongAdder 就体现出了其价值。请注意,每个线程唯一要做的是尝试增加计数器——这是一个最极端的综合基准测试。这里的竞争比你现实中可能看到的大部分应用更为强烈,但有时你 _ 确实 _ 需要这类共享计数器,而 LongAdder 能提供很大的帮助。

Drew 继续演示了 AtomicLong,它在单线程条件下快一点。然而,在使用两个线程时,它要慢 4 倍;当线程数与核数相同时,它几乎慢 5 倍。他还指出,“当线程数超过 CPU 的物理核数时,LongAdder 的性能就保持恒定了”。

放弃简易实现

简易实现是 Java 8 的一个计划特性,支持将 Java SE 的定制实现与要基于它运行的应用打包到一起。不依赖应用所使用代码的元素可以移除。对于想把 Java 嵌入到设备中的应用,这类实现可能是有用的(比如家用设备)。

Mark Reinhold 最近提议从 Java SE 8 中去掉简易实现。他援引了法律问题作为理由。

为保持兼容性并防止分裂, Java SE 8 的简易实现特性需要对 TCK 许可做一些重大的修改。

我已经和 Oracle 的法务部门就这些修订共同工作过一段时间。我们有一个初始草案,但是现在遗憾的是,我认为专家组成员、JCP 执行委员会成员和其他各方已经没有足够的时间审阅和评注这些修改了。

因此我建议从 Java SE 8 中去掉简易实现特性。这只需要修改规范和 TCK 规则,不需要修改参考实现或实际的 TCK 测试。

Reinhold 还写道,他认为简易实现对于 Java 平台的未来很是重要,该特性可能会在 Java SE 9 之前的版本中加入。

Java 8 的发布已经近在咫尺。更易用的日期、闭包、更好的并发和一个新的 JavaScript 引擎,离我们只有一个月之遥了!你会升级吗?如果不升级,是有技术方面的原因阻止你升级吗?

查看英文原文: Java 8 News: Release Candidates Available, New Atomic Numbers and Stripped Implementations Dropped

2014-02-18 18:422535
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

架构师训练营 - 第 9 周课后作业(1 期)

Pudding

排序与二分

落曦

Serverless 架构就不要服务器了?

华为云开发者联盟

云计算 Serverless 架构

一个隐藏在方法集和方法调用中且易被忽略的小细节

Gopher指北

后端 Go 语言

区块链加持,鉴定溯源双保险,科技赋能茅台老酒成零售数字化标杆

CECBC

区块链 大数据 防伪溯源

软件测试系统学习流程和常见面试题

测试人生路

软件测试

上线操作规范——基础版本

程序员架构进阶

团队管理 开发流程 发布流程 规范

迁移到 Atlassian Data Center 并没有您想象的那么可怕

Atlassian

负载均衡 高可用 Atlassian Jira

详解企业管理系统工作流配置

Marilyn

敏捷开发 工作流 软件架构

架构师训练营第 1 期 第 9 周作业

李循律

极客大学架构师训练营

Istio 中的智能 DNS 代理功能

Jimmy Song

开源 云原生 Service Mesh istio 服务网格

0到1产品需求整理分析模型参考

燕陈华

产品设计 产品需求

阿里云原生中间件首次实现自研、开源、商用“三位一体”,技术飞轮效应显现

阿里巴巴云原生

阿里云 云原生 中间件

云原生趋势下的迁移与容灾思考

阿里巴巴云原生

云原生 迁移 容灾

Java程序员说:世界上有三个伟大的发明【火、轮子、kafka】

Java架构师迁哥

披星戴月地辛苦割胶或成历史,海南胶园迎来这一“神器”!

华为云开发者联盟

云计算 大数据 IoT

数字货币将使货币政策实施更精准有效

CECBC

数字货币

架构训练营 - 第9周课后作业 - 学习总结

Pudding

第九周作业

Geek_4c1353

极客大学架构师训练营

Minikube-运行在笔记本上的Kubernetes集群

网管

学习 Kubernetes k8s minikube k8s入门

第九周 性能优化(三)总结

蓝黑

极客大学架构师训练营

数字货币步伐加快,苏州将于双十二推出数字人民币红包测试

CECBC

数字人民币

华为云MVP付健权:从机械工程师到AI开发者的华丽转身

华为云开发者联盟

AI 转型 工程师

“人上人”大专学历,通过系统的六个学习步骤,艰难4面终砍offer,“跳进”字节跳动

Java架构追梦

Java 架构 字节跳动 面试 微服务

开发霸总:我要让所有人知道,这个扫码组件,被你承包了

蚂蚁集团移动开发平台 mPaaS

支付宝 uniapp mPaaS

除了类 Excel, SpreadJS 表格控件还能为系统开发带来什么价值?

葡萄城技术团队

从基础设施到云原生应用,全方位解读阿里云原生新锐开源项目

阿里巴巴云原生

阿里云 开源 云原生

为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读

葡萄城技术团队

iOS AOP 方案的对比与思考

GrowingIO技术专栏

ios aop

LeetCode069-x的平方根-easy

书旅

数据结构 算法 Go 语言

解读下一代网络:算力网络正从理想照进现实

华为云开发者联盟

AI 5G 网络 云技术

Java 8新闻:发布候选版面世、新的原子数、放弃简易实现(Stripped Implementations)_Java_Matt Raible_InfoQ精选文章