这篇文章将针对即将到来的Java 9版本进行更新,新增功能 ( 最新更新:2014年 9月9日 )
OpenJDK开发正在加快速度:2014年3月Java 8发布之后,我们预计将进入2年的发布周期。 据报道,Java 9将于2016年发布,并且已经发布了针对该版本的早期JEP(JDK增强提案)列表。 此外,一些JSR(Java规范请求)已经在开发中,并且我们还添加了一些可能包含的其他功能的提示。
旗舰功能包括Jigsaw项目,显着的性能改进和人们期待已久的API,包括:流程API更新,作为java.util一部分的JSON和一个资金处理API。 对于那些想掌握最新技术的人, 这里已经提供了 JDK 9早期访问版本。
在本文中,我们将继续围绕Java 9的主要新功能及其最新内容进行更新。 因此,请继续关注其他更新!
目录
- [已接受]拼图项目–模块化源代码
- [已接受] Process API更新
- [已接受]轻量级JSON API
- [已接受]货币和货币API
- [已接受]改进的竞争锁定
- [已接受]分段代码缓存
- [已接受]智能Java编译–第二阶段
- [预期] HTTP 2客户端
- [预期] Java中的REPL
- 新功能从何而来?
接受的功能
1. Project Jigsaw –模块化源代码
Jigsaw项目的目标是使Java模块化并将JRE分解为可互操作的组件,这是Java 9最受关注的功能之一。此JEP是迈向Jigsaw的4步中的第一步 ,不会改变JRE的实际结构和JDK。 此步骤的目的是将JDK源代码重组为模块,增强构建系统以编译模块,并在构建时强制执行模块边界。 该项目最初是为Java 8设计的,但此后被推迟,并重新定位到Java 9。
完成后,将允许创建按比例缩小的运行时Jar(rt.jar),以针对项目实际需要的组件进行自定义。 JDK 7和JDK 8 rt.jar具有约20,000个类,它们属于JDK,即使其中的许多类并未真正用于特定环境中(尽管Java 8 紧凑型概要文件功能中包含部分解决方案)。 其背后的动机是使Java易于扩展到小型计算设备(物联网),提高安全性和性能,并使开发人员更容易构建和维护库。
关于JEP 201的更多信息
2.处理API更新
到目前为止,使用Java控制和管理操作系统进程的能力有限。 例如,为了做一些简单的事情,例如今天获得流程PID,您将需要访问本机代码或使用某种解决方法。 不仅如此,每个平台还需要不同的实现方式,以确保获得正确的结果。
在Java 9中,期望用于检索Linux PID的代码现在看起来像这样:
public static void main(String[] args) throws Exception
{Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });if (proc.waitFor() == 0){InputStream in = proc.getInputStream();int available = in.available();byte[] outputBytes = new byte[available];in.read(outputBytes);String pid = new String(outputBytes);System.out.println("Your pid is " + pid);}
}
要变成这样(也支持所有操作系统):
System.out.println("Your pid is " + Process.getCurrentPid());
该更新将扩展Java与操作系统交互的能力:处理PID,进程名称和状态的新直接方法,以及枚举JVM和进程等的能力。
关于JEP 102的更多信息
3.轻量级JSON API
当前,有一些替代方法可用于处理Java中的JSON,此API的独特之处在于它将成为语言的一部分,是轻量级的,并且将使用Java 8的新功能。它将直接通过java.util传递(与JSR 353不同)使用外部软件包或其他替代方法 )。
**代码样本即将推出!
关于JEP 198的更多信息
4.货币和货币API
在Java 8中引入了新的Date and Time API之后,Java 9带来了一个新的官方API,用于表示,传输和执行Money和Currency的综合计算。 要了解有关该项目的更多信息,可以在Github上访问JavaMoney。 代码和用法示例已在此处提供。 以下是一些要点:
Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal
FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places
Money total = amt1.add(amt2);
新的货币类型:Money和FastMoney
MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat(
Locale.GERMANY);System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD
根据不同国家格式化货币
关于JSR 354的更多信息
5.改善竞争性锁定
锁争用是许多多线程Java应用程序的性能瓶颈。 增强建议旨在改善Java对象监视器的性能,这些性能由不同的基准测试得出。 这些测试之一是Volano 。 它模拟了具有大量线程数和客户端连接的聊天服务器,其中许多服务器试图访问相同的资源并模拟重型现实应用程序。
这些压力测试将JVM推到极限,并尝试确定它们可以实现的最大吞吐量,通常以每秒消息数为单位。 该JEP雄心勃勃的成功指标是对22个不同基准的重大改进。 如果成功,这些性能改进将在Java 9中推出。
关于JEP 143的更多信息
6.分段代码缓存
Java 9的另一个性能改进来自JIT编译器角度。 快速执行某些代码区时,VM会将其编译为本地代码并将其存储在代码缓存中。 此更新旨在将代码缓存分段到已编译代码的不同区域,以提高编译器的性能。
而不是单个区域,代码缓存将根据代码在缓存中的生命周期分为三部分:
- 永久保留在缓存中的代码(JVM内部/非方法代码)
- 寿命短(配置文件代码,特定于某些条件)
- 潜在的长寿命(非配置文件代码)
分割将允许进行一些性能改进。 例如,方法清除程序将能够跳过非方法代码并更快地执行操作。
关于JEP 197的更多信息
7. Smart Java编译,第二阶段
Smart Java编译工具或sjavac最初是在JEP 139上开发的 ,目的是通过在所有内核上运行javac编译器来提高JDK的构建速度。 借助JEP 199,它进入了第二阶段,将在第二阶段进行改进和推广,以便默认情况下可以使用它并构建JDK以外的其他项目。
关于JEP 199的更多信息
还有什么期望?
8. HTTP 2客户端
HTTP 2.0尚未作为标准发布,但是它将很快提交以供最终审查,并且有望在Java 9发行之前完成。JEP 110将为Java定义并实现一个新的HTTP客户端,它将取代HttpURLConnection,并实现HTTP 2.0和websockets。 它尚未作为公认的JEP发布,但针对Java 9,我们希望将其包含在内。
HTTP 2.0 RFC的正式发布日期当前定为2015年2月,以Google的SPDY算法为基础。 SPDY在HTTP 1.1上已显示出极大的速度改进,范围在11.81%到47.7%之间,并且其实现已存在于大多数现代浏览器中。
关于JEP 110的更多信息
9. Kulla项目– Java中的REPL
最近宣布的Java 9不太可能出现,但可能会在2015年4月设定目标集成日期,从而按时完成。如今,还没有“原生” Java方式实现REPL(读-评估-打印-循环)。 意思是,如果您要运行几行Java来快速地自行检查它们,则必须将其全部包装在单独的项目或方法中。 流行的IDE以及其他解决方案(如Java REPL)都有REPL附加组件,但到目前为止,尚无官方方法可以这样做– Project Kulla可能是答案。
有关库拉计划的更多信息
奖励:新功能从何而来?
JEP和JSR通常不会突然出现,这是将它们结合在一起的结构:
- 组 –在广泛的主题或特定代码体系方面具有共同利益的个人和组织。 安全,网络,Swing和HotSpot是一些示例。
- 项目 –产生大量代码,文档或其他努力的工作。 必须由至少一个团体赞助。 最近的示例是Lambda项目,Jigsaw项目和Sumatra项目。
- JDK增强建议 ( JEP )–允许在需要进一步探索时在JCP之前或与之并行地非正式地推广新规范。 接受的JEP成为JDK路线图的一部分,并分配一个版本号。
- Java Specification Request ( JSR )–该功能的实际规范在此阶段发生,可以通过组/项目,JEP或来自单个JCP(Java Community Process)成员来进行。 通常会为每个Java版本打开一个伞式JSR,而Java 9尚未实现。社区的各个成员也可以提出新的Java规范请求。
翻译自: https://www.javacodegeeks.com/2014/09/java-9-the-ultimate-feature-list.html