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 下载安 ...
随机推荐
- 介绍一个Redis的WEB 客户端
http://webd.is/ $ git clone git://github.com/nicolasff/webdis.git $ cd webdis$ make$ ...
- mongdb ---shard
http://blog.fens.me/mongodb-shard/ https://segmentfault.com/a/1190000004263332 1. 和用户管理相关的操作基本都要在adm ...
- Python开发【Django】:Model操作(二)
Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...
- 布局-EasyUI Panel 面板、EasyUI Tabs 标签页/选项卡、EasyUI Accordion 折叠面板、EasyUI Layout 布局
EasyUI Panel 面板 通过 $.fn.panel.defaults 重写默认的 defaults. 面板(panel)当做其他内容的容器使用.它是创建其他组件(比如:Layout 布局.Ta ...
- android studio 使用CMAKE
前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要正确,甚至要记得住所有 ...
- cocos-lua基础学习(四)quick层封装后的目录结构
命名空间 cc cocos2d核心类 ccb cocosbuilder扩展 ccs cocostudio扩展 cocos2d目录结构 bitExtend.lua cocos2d.lua cocos2d ...
- SEO笔记:Anatomy of a URL
Dr. Peter J. Meyers 原文链接:https://moz.com/blog/seo-cheat-sheet-anatomy-of-a-url 原文主要通过对比讲解 SEO优化后的URL ...
- 13信号signal
信号 传送给进程的事件通知,完成异步通信 信号的产生 1.程序错误:硬件异常,除数为0,等 2.外部事件:定时器事件,按键中断(ctrl+c)等 3.显示请求:调用 kill, raise 等信号发 ...
- Python 中的多维字典
Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...
- Python Missing parentheses in call to 'print'
原来是因为Python2.X和Python3.X不兼容. 我安装的是Python3.X,但是我试图运行的却是Python2.X 的代码. 所以上面的语法在python3中是错误的.在python3中, ...