写点什么

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:422208
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

在开源的公链上实现隐私保护?静看NA公链 NAC公链创新之路应如何蜕变

区块链第一资讯

【技术面对面】基于场景图的多物体图像生成技术

京东科技开发者

云计算

JVM-技术专题-Class文件加载虚拟机

洛神灬殇

JVM Class字节码

华为云自研PB级分布式时序数据库揭秘第一期初识GaussDB(for Influx)

华为云开发者联盟

云原生 时序数据库 华为云 分布式时序数据库 GaussDB(for Influx)

一个魔幻的框架,3分钟纯 Java 注解搭个管理系统

程序员小富

Java 大前端 后端

实现一个“能中断”的ajax

云小梦

JavaScript ajax Promise axios 请求拦截

Python基础之:Python中的异常和错误

程序那些事

Python Python3 程序那些事

云图说|一张图带你了解华为云分布式数据库中间件

华为云开发者联盟

数据库中间件 DDM 分布式数据库中间件 华为分布式数据库中间件

科技赋能城市建设,英特尔正式发布智慧社区解决方案参考架构

E科讯

首站重庆聚焦智慧物流、呈现最新AI能力

百度大脑

AI 百度大脑

Python OpenCV setMouseCallback 回调函数,取经之旅第 13 天

梦想橡皮擦

3月日更

企业利用边缘计算的10种方式

浪潮云

边缘计算

“广度”和“深度”,是我最终选择蚂蚁的理由

DT极客

实战案例丨分布式系统中如何用python实现Paxos

华为云开发者联盟

Python 算法 分布式系统 PAXOS 集群库

银四30天,苦心啃透java高级工程师面试1000题,涨薪10K很难吗?

Java 编程 程序员 架构 面试

区块链溯源,茶叶溯源平台的搭建

13828808769

区块链+ #区块链#

Java程序员都要懂得知识点:反射

华为云开发者联盟

Java 对象 反射 class 函数

一次客户需求引发的K8s网络探究

京东科技开发者

云计算

LDO和DC-DC有什么不同?如何选型?

不脱发的程序猿

28天写作 3月日更 LDO DC-DC 电源转换

【签约计划】技术编辑能力考核成绩公布

InfoQ写作社区官方

签约计划 热门活动

Mongodb特定场景性能数十倍提升优化实践(记一次十亿级mongodb核心集群雪崩故障)

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

区块链溯源服务平台,区块链商品防伪溯源解决方案

13828808769

区块链+ #区块链#

区块链溯源,茶叶溯源平台的搭建

13828808769

#区块链#

python中find_element()和find_elements()的区别

Geek_6370d5

Python

Java 并发系列(二):DCL — Double Check Lock

TroyLiu

Java volatile 多线程 synchronized DCL

百度飞桨中国行南京站开启!共研AI赋能产业新模式

百度大脑

百度 AI 飞桨

开源项目月刊《HelloGitHub》第 60 期

HelloGitHub

GitHub 开源

智慧公安警务系统搭建,警务大数据可视化分析平台解决方案

13828808769

智慧城市

Elasticsearch详细剖析

大数据技术指南

ES 3月日更

Python+OpenCV检测灯光亮点

不脱发的程序猿

Python OpenCV 28天写作 3月日更 检测灯光亮点

Rust从0到1-基础概念-注释

rust 代码注释

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