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 下载安 ...
随机推荐
- Nginx文件下载服务器
1. 配置文件 server { listen 80; #端口 server_name localhost; #服务名 charset utf-8; #避免中文乱码 root /data/packag ...
- Air Raid---hdu1151(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151 最小路径覆盖 == 顶点数 - 最大匹配. #include<stdio.h> #i ...
- Python开发【Django】:Model操作(二)
Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...
- 【Loadrunner】性能测试报告实战
一.一份好的性能测试报告需要遵循什么规则? 好的报告只需要遵循3点即可:清晰的结构.简要的语言以及数据的对比. 二.如何用Loadrunner自动到处HTML以及word版的报告? 1.导出html格 ...
- git-【八】多人协作
当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin. 要查看远程库的信息 使用 git remote 要查看远程库的详 ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 51: ord
1.问题描述:一个在Django框架下使用Python编写的定时更新项目,在Windows系统下测试无误,在Linux系统下测试,报如下错误: ascii codec can't decode byt ...
- Python 以指定列宽格式化字符串
问题: 有一些长字符串,想以指定的列宽将他们重新格式化 解决方案: 使用textwrap模块来格式字符串的输出. textwrap 模块对于字符串打印时非常有用的,特别是当希望输出自动匹配终端大小的时 ...
- Qml应用程序的性能考虑与建议
本文翻译自Qt官网文档: http://doc.qt.io/qt-5/qtquick-performance.html QtQml应用程序的性能考虑与建议 1.时间考虑 作为一名程序开发者,应该努力使 ...
- python3的一些练习题
下面是最近写的一些python3版本的一些练习题: 1.4+44+444+4444+.....+=? root@wadeson:~/study_for_python/homework# cat aa. ...
- 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础
目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ...