Java9新特性
转载:http://blog.csdn.net/qq_32524177/article/details/77014757
写在前面的话:Java9来了,搜索了很多关于Java9的新特性,但文献不多,特翻译这篇概括性比较强的官方文章以供参考,本人英文水平有限,虽力求每个词语准确,但必然会有一些偏差,请海涵纠正,,详细的更新内容请点击超链接。
在java9中发布了哪些大家期待的令人振奋的新特性呢?
不要因为java9发布前的相对平静就不关注它!JDK的核心代码提交者们正在努力地为下个版本的发布做准备,这个版本预计于2017年9月就可以被普遍使用。
早期的可访问项目构建(access builds)已经随处可见,现在我们正通过"Java9倒计时网"为能够获取这个版本倒计时.
现在我们能够获得一张相当清晰的,我们能期望在java9中出现的新特性蓝图.如果Java8能被描述成主要是Lambda表达式、数据流和API变更的发布版本,那么java9主要是Jigsaw(The primary goals of this Project are to:Make the Java SE Platform, and the JDK, more easily scalable down to small computing devices;Improve the security and maintainability of Java SE Platform Implementations in general, and the JDK in particular;Enable improved application performance; and Make it easier for developers to construct and maintain libraries and large applications, for both the Java SE and EE Platforms.To achieve these goals we propose to design and implement a standard module system for the Java SE Platform and to apply that system to the Platform itself, and to the JDK. The module system should be powerful enough to modularize the JDK and other large legacy code bases, yet still be approachable by all developers.)、jshell(我们在运行简单代码时不用再写main方法了)以及一系列的高级选项和API更新。在这次发布中我们搜集了一些我们认为会是Java9中最让人振奋的特性--除了最常见的猜想之外,Jigsaw项目承载着拆分Java运行环境并且使Java的核心组件更加的模块化。
以下是一些必须了解的Java9的特性,其中一些已经在早期发布的版本能够让你随意修补。
1.Java+REPL=Jshell(ps:R(read)、E(evaluate)、P(print)、L(loop)顾名思义:读取,计算,打印,循环-交互式解释器环境 )
是的,先前我们还在怀疑kulla(这个项目的目的是调查在java编程语言的REPL工具的产物是否如同在java优化提案中描述的那样)项目能否及时完成为Java9的任务(为java9提供jshell服务)但是现在
它已经获得官方的认可。下个版本的java会重点推出一个被称为Jshell的命令行工具,使得java对REPL原生支持并且更加的通俗化。意思就是说,举个例子,如果你想让一些短短数行的java代码自己运行起来,
你不用再将他们包装成单独的项目或者方法。哦,对了,还有分号,你可忘记它们了:
-> 2 + 2
| Expression value is: 4
| assigned to temporary variable $1 of type int
(对于REPL)现在有很多很多的替代选择,比如一些流行开发工具的REPL插件或者像JAVA REPL web控制台这样的解决方案,但是到目前为止都没有正确的并且官方的方式来处理它。Jshell已经在先前发布的版 本中可用了,它正等着你给他一个测试运行。
2.值得注意的API更新:并发和栈遍历
做为这次更新的一部分,我们希望在这次更新发布以后有额外的、覆盖广泛的特性。
在这里我们想提及的最重要的事就是Java9并发性api基于CompletableFuture(1.8以后才有的interface,继承自java.util.concurrent.Future,没用过,大概的意思就是当你不需要或者不想立马获取某个计算的结果时,我们使用FUture对象来"占位"等待计算完成)和java.util.concurrent.Flow类的更新。Flow是响应式流API的实现,我们非常开心的是它来到了java。响应式流解决了背压之痛(在rxjava中会经常遇到一种情况就是被观察者发送消息太快以至于它的操作符或者订阅者不能及时处理相关的消息。那么随之而来的就是如何处理这些未处理的消息)。当传入任务率高于应用本身的处理能力来处理数据时,数据的内建产生,这会为未处理的数据产生一个缓冲区。作为并发更新的一部分,CompletableFuture类也会获得一次更新,这次更新会解决自Java8对他们的介绍后发出的抱怨。这次更新包括支持延时和超时,更好的支持子类化以及增加了一些实用的方法。
在这里我们想提及的第二件事就是栈遍历API。是的,Java9会改变你遍历栈追踪(StackTrace)的方式.从根本上来说,这是一个Java官方的处理栈追踪的方式,而不是仅仅把它们当做纯文本来处理。这听起来有点像一份模糊的"星球大战"计划参考,让我们对它爱不释手。
3.G1将成为新的默认GC
Java仅有一个垃圾收集器是我们经常听到的最普遍的误解,但事实上它有4个。在J9之前,默认的垃圾回收器是'Parallel
/ Throughput Collector',但是现在它被我们在Java7中介绍过的G1取代了。
想了解这些GC之间的部分差别,请点击这里。
一般来说,G1被设计出来是为了更好的支持4GB以上的堆内存以及众所周知的减少频繁的GC暂停,但当有GC暂停时,这个停顿时间会比以前更长。同时我们也和Next Insurance的主观Haim Yadid讨论了关于GC的所有事,希望可以帮你了解更多关于如何在不同GC之间权衡。
4.HTTP2.0是未来的发展趋势
官方的基于谷歌SPDY(应用层协议)算法的HTTP2.0请求注解在不久前通过了审核。SPDY已经展现出了相较于HTTP1.1较大的速度提升,提升率介于11.81%-47.7%之间,同时在大多数现代浏览器中已经有它的实现。
J9将会全面地支持HTTP2.0并且为Java形成新的HTTP客户端,这会替代HttpURLConnection同时实现HTTP2.0和web套接字.另外一件关于这个API的酷事是,它将被作为Java中的'第一个孵化器模块'介绍给大众。
孵化器模块事实上是一个实验性的特性,或许它将发展到被下个版本的Java采用,也就是说Java10,或许就被移除了。这是一个非同寻常的Java理念,它在促进实验的同时并不破坏向后兼容性。
5.进程类API得到了巨大的推进(Process 类,抽象类,提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法)
迄今为止,java在控制和管理操作系统进程方面的能力是有局限性的。举个栗子,在早期版本的Java中为了做一些简单如获取你的进程的PID,你可能需要访问本地代码或者使用一些非同寻常的方式。此外,它还要求对于不同的平台有不同的实现,以确保你获得的结果是正确的。
在JAVA9中,预期的获取Linux进程ID的代码看起来是这样的:
- 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的能力延伸到和操作系统之间相互作用:
新增直接处理PIDS,进程名和状态的方法以及枚举JVM和进程的能力等等。这对于一些人来说可能不是特别令人兴奋,但是对于OverOps上的我们来说可能会广泛地使用它,因此,
这就是为什么我们考虑在其他的特性在中高亮标注它。
6.产品调试
除了Java9本身以外,我们认为这次发布会成为一次分享一些我们所取得的新进步的机会。解决产品中的错误一直以来都是一个麻烦的事情,在海量的日志文件中寻找线索,并且尝试确认每个导致错误状态的异常或者错误。
但是如果你能完全避免日志文件呢?这里是它怎么做到的。
许多了解它的java开发者有一大堆关于这个工具的问题想问,因此我们也建立了1对1的示例表格,来看看并且制定一个私人的工作计划吧!
此外Java中还移除了一些API,时间有限就不做翻译和列举,请点击查看。
Java9新特性的更多相关文章
- Java9 新特性 详解
作者:木九天 < Java9 新特性 详解 > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...
- 点击--》java9 新特性 详解
引言: 点击-->java9 新特性 详解 点击-->java8 新特性 详解 正题: 1.局部变量var 将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为 ...
- 【Java基础】Java9 新特性
Java9 新特性 模块化系统 Java 和相关生态在不断丰富的同时也越来越暴露出一些问题: Java 运行环境的膨胀和臃肿.每次 JVM 启动的时候,至少会 30-60MB 的内存加载,主要原因是 ...
- 传统JIT和java9新特性AOT理解
java慢的原因 1. 除了少量基本类型用栈存储外,所有对象都使用堆存储.堆的性能低于栈. 2. 很多强制类型转换(cast)或加查,耗用内存大.java运行时对类型检测,如果类型不正确会抛出Cl ...
- Java9新特性之——JShell
java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9.jdk9和jdk8中的新特性不同:jdk8中的stream和lambda表达式能够让开发者非常快 ...
- Java9 新特性
Java9中的9个新特性 1. Java 平台级模块系统 2. Linking 3. JShell: 交互式 Java REPL 4. 改进的 Javadoc 5. 集合工厂方法 6. 改进的 Str ...
- JAVA9新特性——JShell使用笔记
前言:JShell是java 9的新特性之一,由于在之前学校java8的lambda表达式的时候,就希望有这么一个可以交互的界面来快速响应编写的代码.刚好java9出来了,就对它把玩起来了... 内容 ...
- java9新特性-6-多版本兼容jar包
1.官方Feature 238: Multi-Release JAR Files 2.使用说明 当一个新版本的Java出现的时候,你的库用户要花费数年时间才会切换到这个新的版本.这就意味着库得去向后兼 ...
- java9新特性-2-安装与官网说明
1.jdk 9的下载 http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 下载安 ...
随机推荐
- Python开发【模块】:torndb
Torndb模块 概要:torndb是一个轻量级的基于MySQLdb封装的一个模块,其是tornado框架的一部分.其项目主页为:https://github.com/bdarnell/torndb ...
- 广通软件荣获“2016年度ITSS优秀会员”称号
1月12日,为了表彰在IT服务标准研制和应用推广工作中所做出的贡献,中国电子工业标准化技术协会信息技术服务分会(以下称ITSS分会)在北京召开“2016年度ITSS优秀会员”专家评选活动,广通软件获得 ...
- django通用视图
通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回 ...
- 总结工作中常用的PHP代码
[目录] ◆PHP常用的代码 ◆HTML常用代码 [值传递 和 引用传递] [单例模式] [魔术常量] [代码调试(自定义一个简单的debug函数)] [thinkphp多表查询] [获取客户端IP地 ...
- Eclipse中没有javax.servlet和javax.servlet.http包的处理办法
使用Eclips开发JSP也需要这两个包:javax.servlet和javax.servlet.http:若提示没有javax.servlet包则安装如下处理办法解决: 如果你装了Tomacat,那 ...
- (转)SSIS处理导入数据时, 存在的更新, 不存在的插入
问题描述: 当你把数据从其他数据库, 或者是文本文件之类的其他数据源导入到目的数据库时, 有时希望在导入的处理中, 能够实现"数据存在时更新, 不存在时导入" 在之前, 一般是通过 ...
- 系统管理命令之id
当我们想知道某个用户的UID和GID时id命令是非常有用的.一些程序可能需要UID/GID来运行.id使我们更加容易地找出用户的UID以GID而不必在/etc/group文件中搜寻. 1.获取指定用户 ...
- 解决 failed to push some refs to 'git@github.com:zle1992/head-first-java' hint: Updates were rejected because the tip of your curr
问题描述: 寒假之前用实验室电脑push到github 上head first java 的程序,寒假回家后,想用自己的笔记本继续编,继续push . 我先从github下载zip到本地,然后 解压后 ...
- inline用法详解
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- tslib移植中环境变量编辑
(1)将/usr/local/tslib下的所有文件复制到移植系统文件中/usr/local(2)编辑移植系统中/etc/profile添加触摸屏支持内容:在/etc/profile文件中设置tsli ...