Java 9 –终极功能列表

Java-9-望远镜
这篇文章将针对即将到来的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的主要新功能及其最新内容进行更新。 因此,请继续关注其他更新!

目录

  1. [已接受]拼图项目–模块化源代码
  2. [已接受] Process API更新
  3. [已接受]轻量级JSON API
  4. [已接受]货币和货币API
  5. [已接受]改进的竞争锁定
  6. [已接受]分段代码缓存
  7. [已接受]智能Java编译–第二阶段
  8. [预期] HTTP 2客户端
  9. [预期] Java中的REPL
  10. 新功能从何而来?

接受的功能

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018.3.30 边框应用与导航栏设置

<!DOCTYPE html><html> <head> <meta charset"utf-8" /> <title></title> <style type"text/css"> /*制作三角形*/ #one{ width: 0px; …

centos 更改用户登录宿主机时间

chage -l username (查看用户登录时间&#xff1a;username为查看的用户) chage -M 90 username &#xff08;将用户登录主机的时间更改为90天&#xff09; 转载于:https://www.cnblogs.com/MUQINGFENG123/p/11075912.html

js中的作用域和作用域链

作用域就是变量与函数的可访问范围。在js中只有 全局作用域 和 函数作用域 &#xff0c;并没有块级作用域。 全局作用域 在所有函数外定义的变量、声明的函数就是全局作用域&#xff0c;在全部环境下都可以访问。 var a 111;function fn(){console.log(a); }fn(); // 打印了…

CryEngine3 引擎非商业用途将免费

CryEngine3引擎非商业用途将免费:8月发布 http://t.cn/hdEr45】Crytek日前宣布将在今年8月免费推出CryEngine3引擎的开发包&#xff0c;登录Crytek官网注册&#xff0c;签署保密协议保证不将CryEngine3用作商业用途&#xff0c;就可获得CryEngine3软件授权。Crytek官网上的一份…

vue打包后不使用服务器直接访问方法

根据官网打包执行npm run build 后dist文件夹打开的index.html 是空白 需要开启http服务器才能访问&#xff0c;以下是解决办法 1、找到config文件夹下的index文件 修改成 2、找到build文件夹下的until文件 修改成 然后执行npm run build重新打包下就ok了 更多专业前端知…

IntelliJ中的键盘快捷键

我上周参加了Hadi Hariri在JavaOne上的演讲。 他介绍了很多我不知道的IntelliJ键盘快捷键。 非常有用的谈话。 我在下面列出了一些最有用的。 Cmd-1&#xff1a;将焦点移到“项目”窗口 在此输入任何类名&#xff08;包括使用Camel Case&#xff0c;例如HW来查找HelloWorld&a…

OpenStack虚机网卡的创建过程

原文&#xff1a;https://www.sdnlab.com/20286.htmlOpenStack最基本和常用的操作就是启动虚机。虚机启动的过程中涉及很多内容&#xff0c;其中非常重要的一个环节就是创建并绑定虚机的虚拟网卡。虚机的创建和管理是Nova的任务&#xff0c;虚机网络的创建和管理是Neutron的任务…

js中的原型与原型链

js的学习有三座大山&#xff0c; 原型/原型链 、 作用域/闭包 、 异步/单线程&#xff0c;这三个知识点虽然基础但是入门时理解起来比较困难&#xff0c;本文先整理总结原型和原型链这一知识点。 1. 原型链怎么来的&#xff1f;对象的原型和function的prototype属性有什么关系…

线性表--算法设计题2.29

已知A&#xff0c;B和C为三个递增有序的线性表&#xff0c;现要求对A表作如下操作&#xff1a;删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法.&#xff08;注意&#xff1a;题中没有特别指明同一表中的元素值各不相同&#xff09;。C code: #in…

HTML5 audio 如何实现播放多个MP3音频

<audio>标签是HTML5中的新标签&#xff0c;定义声音用于嵌入音频内容&#xff0c;比如音乐或其他音频流。用的比较多音频格式是.mp3。 <audio>标签常用属性如下表 属性值描述autoplayautoplay添加该属性后&#xff0c;音频会自动播放controlscontrols设置后&…

Java代码中的典型错误

该页面包含在与我一起工作的人的Java代码中看到的最典型的错误。 静态分析&#xff08;出于明显的原因&#xff0c;我们使用查询无法捕获所有错误&#xff0c;这就是为什么我决定在此处列出所有错误的原因。 如果您要在此处添加其他内容&#xff0c;请告诉我&#xff0c;我们将…

windwos下ntp服务器配置 arm平台ntp客户端获取同步时间

项目需要使用同步时间&#xff0c;在arm-linux开发板上&#xff0c;移植了ntp客户端&#xff0c;查看了一些资料&#xff0c;最终发现使用windows自带的ntp服务器比较方便&#xff0c;而且很靠谱&#xff0c;使用配置了一番&#xff0c;已经能够正常使用 详细步骤&#xff1a; …

css 控制图片最大宽度

CSS 限制图片最大宽度 (本文来自本站原创&#xff0c;转载请务必注明出处&#xff01;)我们在制作一个网页的时候&#xff0c;经常要对一个区域里可能出现的图片的宽度进行限制&#xff0c;不然它可能会把页面撑得很烂很烂。如果你采用固定宽度&#xff0c;长度来设置的话&…

BOM(Browser Object Model)

BOM&#xff08;浏览器对象模型&#xff09;&#xff0c;提供了一系列操作浏览器&#xff0c;获取浏览器信息的接口。这些接口在平时的工作中会经常用到&#xff0c;例如当前页面的刷新&#xff0c;获取url的参数等等。 注&#xff1a;图片来自 http://www.dreamdu.com/javascr…

入门 IT 行业,该具备哪些技能?

对于刚开始进入IT的新人来说&#xff0c;“必备技能”往往意味着一个长长的、标有重要度的学习列表&#xff0c;但是过长的列表通常会导致新人不知如何开始学习&#xff0c;压力倍增。本文尝试列举出最重要的几个技能&#xff0c;也期望通过此列表能给新人一个比较明确的学习重…

实验七作业

Part 1:验证性实验 将line29&#xff1a;for(i0;i<N;i)改为while(!feof(fp)) // 从文本文件file1.dat中读取数据&#xff0c;找出最高分和最低分学生信息&#xff0c;并输出在屏幕上 #include <stdio.h> #include <stdlib.h>#define N 10// 定义一个结构体类型…

块级格式化上下文(Block Formatting Context)

CSS块级格式化上下文是块级盒子的一种能力&#xff0c;这种能力并不是直接通过css属性声明而获得的&#xff0c;而是添加css的一部分相关属性之后自动获得的能力&#xff0c;也就是说没有一个明确的属性就是生成块级格式化上下文的。 块级格式化上下文的能力就是让具有该能力的…

这是最后的讨论!

Pun打算……让我们讨论Java final 。 最近&#xff0c;我们广受欢迎的博客文章“编码Java时的十个微妙的最佳实践”在JavaWorld的摘要和链接中有了很大的复兴&#xff0c;并提出了一组新的评论。 尤其是&#xff0c;JavaWorld编辑对我们对Java关键字“ final ”的观点提出了质…

前端性能优化方法总结

一个网站前端性能的好坏很大程度上影响了用户愿不愿意使用访问这个网站&#xff0c;因此对前端进行性能优化是个很重要的事情。  对于前端性能优化这个问题&#xff0c;主要学习自yahoo前端性能团队总结的35条黄金定律总结&#xff0c;觉得很全很赞&#xff0c;做个学习总结和…

JS中的数据类型转换

ES5中一共有6种数据类型&#xff0c;其中5种基本类型&#xff08;String、Number、Boolean、Null、Undefined&#xff09;&#xff0c;1种引用类型&#xff08;Object&#xff09;。基本类型值可以相互换转换&#xff0c;并且引用类型值也可以通过某种方式转换成基本类型值。 …