您好,欢迎访问三七文档
--Java9姓名:导师:班级:专业:技术分享LOGO|COMPANYPARTONE新特性列表Java9的模块化是颠覆性改进的Java9代码编译Java9终于有了REPLJava9增强了SteamAPIJava9支持代码缓存的分割通过Nashorn项目Java9更好的支持JavascriptJava9引入HTTP/2客户端APIJava9改进了对HTML5和Unicode的支持Java9新增DTLS安全APIJava9废弃和移除的APIJava9中最重要的功能,毫无疑问就是模块化(Module),代码名字叫做Jigsaw(拉锯),这个拉锯项目拉了几年,终于要把庞大冗余的Java锯成一个个的Module,方便开发和部署。熟悉Java的同学,都知道JRE有一个超级大rt.jar(例如,Java8的rt.jar中有65M),运行一个helloworld,你也需要一个数百兆的JRE环境,如果在J2EE环境,情况将变得复杂无比。LOGO|COMPANYPARTONEJava9模块化LOGO|COMPANYPARTONE模块化的功能有几个目的:1.让Java的SE程序更加容易轻量级部署2.改进组件间的依赖管理,引入比Jar粒度更大的Module3.改进性能和安全性。LOGO|COMPANYPARTONEJavaModule:就是代码和数据的封装体,代码是指一些包括类型的Packages。Package是一些类路径名字的约定,而模块是一个或多个Packages组成的一个封装体。LOGO|COMPANYPARTONEJava9模块化例子模块的是通过module-info.java进行定义,编译后打包后,就成为一个模块的实体;在模块的定义文件中,我们需要指定模块之间的依赖靠关系,可以exports给那些模块用,需要使用那些模块(requires)。下面是一个例子:modulecom.baeldung.java9.modules.car{requirescom.baeldung.java9.modules.engines;exportscom.baeldung.java9.modules.car.handling;}...LOGO|COMPANYPARTONEJava9JLinkJLink是将Module进行打包的工具,帮助目标机器的部署。打包后的文件将非常精简。PARTONEModule的原理将ClassLoader分为三个级别,BootstrapLoader具有最高优先级和权限,主要是核心的系统类;PlatformLoader用于扩展的一些系统类,例如SQL,XML等;ApplicationLoader主要用于应用程序的Loader。在这三个级别的Loader下面有一个统一Module管理,用于控制和管理模块间的依赖关系,可读性,可访问性等。注意,ClassLoader在Java9中的类装载逻辑和之前一样,但是,通过模块管理系统,ClassLoader.FindClass的能力,将被限制在readable&accessible的条件下,而不是之前的简单的Public条件。Java9的升级带来了几个代码编译的新功能,其中最主要的是AoT(ahead-of-time)编译。虽然仍处于试验阶段,但这个功能使得Java应用在被虚拟机启动之前能够先将Java类编译为原生代码。此功能旨在改进小型和大型应用程序的启动时间,同时对峰值性能的影响很小。JIT(Just-in-time)编译器速度很快,但是Java项目现在变得很大很复杂,因此JIT编译器需要花费较长时间才能热身完,而且有些Java方法还没法编译,性能方面也会下降。AoT编译就是为了解决这些问题而生的。JDK9还更新了javac编译器以便能够将java9代码编译运行在低版本Java中。LOGO|COMPANYPARTONE改进的Java9代码编译Java9的另一个特性是拥有了REPL(read-eval-printloop)工具,这是另一个Java的长期目标,在Kulia项目中经过多年研发后终于在Java9中得以实现。Java9的REPL名为jShell,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。命令行工具的功能包含tab自动补全和自动添加分号。jShellAPI支持在IDE和其他工具中使用jShell功能,虽然这个工具本身不是IDE。REPL的缺失是高校想要把Java从学校课程中剔除的一个原因(像Python和Scala之类的语言早就有REPL了)。但Scala语言的创始人MartinOdersky质疑Java中REPL的作用,他说Java是面向语句的,而REPL是面向表达式的。LOGO|COMPANYPARTONEJava9终于有了REPLjdk-9\binjshell.exe|WelcometoJShell--Version9|Foranintroductiontype:/helpintrojshellThisismylongstring.Iwantapartofit.substring(8,19);$5==mylongstringLOGO|COMPANYPARTONEJava9终于有了REPL这是我们在Jshell这个控制台下运行,我们如何运行脚本文件呢?jshell/savec:\develop\JShell_hello_world.txtjshell/openc:\develop\JShell_hello_world.txtHelloJShell!Java9废弃或者移除了几个不常用的功能。其中最主要的是AppletAPI,现在是标记为废弃的。随着对安全要求的提高,主流浏览器已经取消对Java浏览器插件的支持。HTML5的出现也进一步加速了它的消亡。开发者现在可以使用像JavaWebStart这样的技术来代替Applet,它可以实现从浏览器启动应用程序或者安装应用程序。同时,appletviewer工具也被标记为废弃。Java9还废弃了并行标记扫描(CMS,ConcurrentMarkSweep)垃圾回收器,在未来的发布版本中将进一步停止支持。其目的是加速HotSpot虚拟机中其他垃圾回收器的发展。低暂停G1(low-pauseG1)回收器将是CMS的长期替代品。LOGO|COMPANYPARTONEJava9废弃和移除的API就目前而言,JDK提供的Http访问功能,几乎都需要依赖于HttpURLConnection,但是这个类大家在写代码的时候很少使用,我们一般都会选择Apache的HttpClient,此次在Java9的版本中引入了一个新的package:java.net.http,里面提供了对Http访问很好的支持,不仅支持Http1.1而且还支持HTTP2,以及WebSocket,据说性能可以超过ApacheHttpClient,Netty,Jetty,简单的来看一个代码片段。LOGO|COMPANYPARTONEJava9ANewHttpClientURIhttpURI=newURI();HttpRequestrequest=HttpRequest.create(httpURI).GET();HttpResponseresponse=request.response();StringresponseBody=response.body(HttpResponse.asString());该特性为JVM的所有组件引入了一个通用的日志系统,提供了JVM日志的基础设施,你可以不用专门为了打印某些日志而添加一些专门的标签,只需要使用统一的log指令即可,比如:java-Xlog:gc=debug:file=gc.txt:none...jcmd9615VM.logoutput=gc_logswhat=gcLOGO|COMPANYPARTONEJava9UnifiedJVMLogging为了安全,Java9新增支持DTLS(DatagramTransportLayerSecurity)的API。这个协议用来在客户端服务器通信中防止窃听,篡改,消息伪造等。客户端和服务端模式都提供了实现。LOGO|COMPANYPARTONEJava9新增DTLS安全API在JDK9中,Javadoc文档工具经过增强现在支持生成HTML5标记文档。Unicode8.0编码标准也得到支持,该标准新增8000个字符,10个块和6个脚本。Java9改进了对HTML5和Unicode的支持Java的Steam让开发者能够快速运算,从而能够有效的利用数据并行计算。Java8提供的Steam能力能够利用多核架构实现声明式的数据处理。在Java9中,StreamAPI通过新增方法,实现有限制的从Stream中添加或者移除元素,遍历Stream中的元素,以及通过扩展JavaSEAPI集合实现从空值创建流的功能。LOGO|COMPANYPARTONEJava9增强了SteamAPINashorn项目在JDK9中得到改进,它为Java提供轻量级的Javascript运行时。Nashorn项目跟随Netscape的Rhino项目,目的是为了在Java中实现一个高性能但轻量级的Javascript运行时。Nashorn项目使得Java应用能够嵌入Javascript。它在JDK8中为Java提供一个Javascript引擎。JDK9包含一个用来解析Nashorn的ECMAScript语法树的API。这个API使得IDE和服务端框架不需要依赖Nashorn项目的内部实现类,就能够分析ECMAScript代码。LOGO|COMPANYPARTONE通过Nashorn项目Java9更好的支持JavascriptLASTPART总结THKANSByliuwenyu
本文标题:java9新特性
链接地址:https://www.777doc.com/doc-5892528 .html