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 下载安 ...
随机推荐
- 第1章 1.2计算机网络概述--Intenet和广域网
1.ISP Internet服务提供商,也称ISP运营商.如:在中国,电信.网通.长城宽带. ISP运营商内部的网络连接十分发达,但是不同ISP运营商之间的连接的线路非常有限,这就导致了跨运营商访问网 ...
- POJ -1062 昂贵的聘礼(前向星 && SPFA)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/30299671 题目链接:id=1062&qu ...
- Spring源码解析(三)BeanDefinition的载入、解析和注册
通过上一篇源码的分析已经完成了BeanDefinition资源文件的定位,本篇继续分析BeanDefinition资源文件的载入和解析. AbstractBeanDefinitionReader的lo ...
- [WorldWind学习]19.WebDownload
using System; using System.Diagnostics; using System.Globalization; using System.Net; using System.I ...
- centos7 安装python3.6 及模块安装演示
目录: 下载python3.6 安装python3.6的依赖 编译安装 更改链接 更改yum脚本的python依赖 修改gnome-weaktool配置文件 修改urlgrabber配置文件 1.下载 ...
- Flask系列(九)flask-script组件
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- HDFS中的读写数据流
1.文件的读取 在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流是怎样的?下面将围绕图1进行具体讲解. 图 1 客户端从HDFS中读取数据 1)客户 ...
- selenium自我手册
(转载需注明原文地址和作者两项,否则视为非授权) 语言:python 0x00 预热 下载安装包 pip install selenium 确定所用的浏览器 支持firefox,chrome,IE,e ...
- Cocos2d-JS实现的打飞机
一.前言 今天我们来讲一个最最最常见的一个小游戏--打飞机!是的,打飞机!还记得小时候在玩儿的雷电,应该是打飞机最早的样子了吧.直到现在,也有微信打飞机,全民飞机大战,全民打飞机等游戏的出现,这些游戏 ...
- object类之toString方法
object是所有类的基类 如果没有使用extends关键字指明其基类,则默认基类为object类 public class Person{ ........ } 等价于: public class ...