一、过时的API Java 9 废弃或者移除了几个不常用的功能,其中最主要的是Applet API,现在是标记为废弃的,随着对安全要求的提高,主流浏览器已取消对Java浏览器插件的支持。HTML5的出现也进一步加速了它的消亡。开发者现在可以使用像Java Web Start这样的技术来代替 Applet,它可以实现从浏览器启动应用程序或者安装应该程序。
同时,appletviewer工具也标记为废弃
二、Java 编译工具改进 智能Java编译工具(sjavac
(Smart java complier)) 用于在多核处理器下提升JDK编译的速度,并取代了之前的JDK编译工具 javac
,继而成为Java环境默认的通用的智能编译工具。 同时,JDK 9 还更新了javac
编译工具,才兼容低版本的JDK。
三、统一的JVM日志系统 日志是解决问题的唯一有效途径,曾经很难知道导致JVM性能问题和JVM崩溃的原因,不同的JVM的日志碎片化和日志选项(如JVM组件对于日志使用的是不同机制和规则),这使得JVM难以调试。 解决该问题最有效的方法:对所有的JVM组件引入一个单一的系统,这些JVM组件支持细粒度和易配置的JVM日志。
四、javadoc的 HTML5生成 可生成html5格式的javadoc。
五、javascript 引擎升级(Nashorn) Nashorn 项目在JDK9中得到改进 ,它为Java 提供轻量级的Javascript运行时。Nashorn项目跟随Netscape 的Rhino 项目,目的是为了在java中实现一个高性能、轻量级的Javascript运行时,Nashorn 使得Java能够嵌入到Javascript,它在JDK 8 中为Java提供一个Javasciprt引擎。 JDK 9 中包含一个用于解析Nashorn的 ECMAScript 语法树的API,这个API使得IDE 和服务端框架不再需要依赖 Nashorn项目的内部实现类就可以分析 ECMAScript代码。
六、java动态编译器 Oracle 一直在努力提高Java启动和运行时的性能,希望其它能够在更多广泛的场景达到或接近本地语言的性能。但是,直到今天,谈到Java,很多C/C++开发者还是会不屑地评价为启动慢、吃内存等。
简单说,这主要是因为Java 编译器产生的类文件是Java虚拟机可以理解的二进制代码,而不是真正可执行的本地代码,需要Java虚拟机解释和编译,这带来了额外的开销。
JIT(Just-in-time) 编辑器可以在运行时将热点编译成本地代码,速度很快。但是Java项目现在变得很大很复杂,因此JIT 编译器需要花费较长时间 才能热身完成,而且有些Java方法还没法编译。性能方面也会下降。AOT 编辑器就是为了解决这些问题而生的
在JDK9中,AOT(AHead of Time Compliation) 作为实验特性被引入进来,开发者可以利用新的 jaotc 工具将重点代码转换成类似库一样的文件。虽然仍处于实验阶段,但这个功能使得Java应用在被虚拟机启动之前能够先将Java类编译为原生代码。此功能旨在改进小于和大型应用程序的启动时间,同时对峰值性能的影响很小。
但是Java技术供应商 Excelsior 的营销总监Dmitry Leskov 担心AOT编译技术不够成熟,希望Oracle 能够等到Java 10 时有个更稳定的版本才发布。
别外,JVMCI(Java Level JVM Compiler Interface) 等特性,对于整个编译器语言的发展,可能都具有非常重要的意义。目前GRaal COre API已被集成进入了JAVA 9 ,虽然还只是一小步,但完全用Java语言实现的可靠的、高性能的动态编译器似乎不再遥不可及,这是Java 虚拟机开发工程师的福音。
与此同时,随着 Truffle 框架 和 Substrate VM 的发展,已经让个另信心满满的工程师高呼 “One VM to Rule Them All !”,也许就在不远的将来 Ploygot 以一种另类的方式成为现实。
七、其它改进
java.io.InputStream 中增加了新的方法来读取和复制 InputStream 中包含的数据。
1 2 3 4 5 readAllBytes () :读取 InputStream 中的所有剩余字节。readNBytes (byte[] b,int off,int len) : 从 InputStream 中读取指定数量的字节到数组中。transferTo (OutputStream out) :读取 InputStream 中的全部字节并写入到指定的 OutputStream 中 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 102: Process API Updates 110: HTTP 2 Client 143: Improve Contended Locking 158: Unified JVM Logging 165: Compiler Control 193: Variable Handles 197: Segmented Code Cache 199: Smart Java Compilation, Phase Two 200: The Modular JDK 201: Modular Source Code 211: Elide Deprecation Warnings on Import Statements 212: Resolve Lint and Doclint Warnings 213: Milling Project Coin 214: Remove GC Combinations Deprecated in JDK 8 215: Tiered Attribution for javac 216: Process Import Statements Correctly 217: Annotations Pipeline 2.0 219: Datagram Transport Layer Security (DTLS) 220: Modular Run-Time Images 221: Simplified Doclet API 222: jshell: The Java Shell (Read-Eval-Print Loop) 223: New Version-String Scheme 224: HTML5 Javadoc 225: Javadoc Search 226: UTF-8 Property Files 227: Unicode 7.0 228: Add More Diagnostic Commands 229: Create PKCS12 Keystores by Default 231: Remove Launch-Time JRE Version Selection 232: Improve Secure Application Performance 233: Generate Run-Time Compiler Tests Automatically 235: Test Class-File Attributes Generated by javac 236: Parser API for Nashorn 237: Linux/AArch64 Port 238: Multi-Release JAR Files 240: Remove the JVM TI hprof Agent 241: Remove the jhat Tool 243: Java-Level JVM Compiler Interface 244: TLS Application-Layer Protocol Negotiation Extension 245: Validate JVM Command-Line Flag Arguments 246: Leverage CPU Instructions for GHASH and RSA 247: Compile for Older Platform Versions 248: Make G1 the Default Garbage Collector 249: OCSP Stapling for TLS 250: Store Interned Strings in CDS Archives 251: Multi-Resolution Images 252: Use CLDR Locale Data by Default 253: Prepare JavaFX UI Controls & CSS APIs for Modularization 254: Compact Strings 255: Merge Selected Xerces 2.11.0 Updates into JAXP 256: BeanInfo Annotations 257: Update JavaFX/Media to Newer Version of GStreamer 258: HarfBuzz Font-Layout Engine 259: Stack-Walking API 260: Encapsulate Most Internal APIs 261: Module System 262: TIFF Image I/O 263: HiDPI Graphics on Windows and Linux 264: Platform Logging API and Service 265: Marlin Graphics Renderer 266: More Concurrency Updates 267: Unicode 8.0 268: XML Catalogs 269: Convenience Factory Methods for Collections 270: Reserved Stack Areas for Critical Sections 271: Unified GC Logging 272: Platform-Specific Desktop Features 273: DRBG-Based SecureRandom Implementations 274: Enhanced Method Handles 275: Modular Java Application Packaging 276: Dynamic Linking of Language-Defined Object Models 277: Enhanced Deprecation 278: Additional Tests for Humongous Objects in G1 279: Improve Test-Failure Troubleshooting 280: Indify String Concatenation 281: HotSpot C++ Unit-Test Framework 282: jlink: The Java Linker 283: Enable GTK 3 on Linux 284: New HotSpot Build System 285: Spin-Wait Hints 287: SHA-3 Hash Algorithms 288: Disable SHA-1 Certificates 289: Deprecate the Applet API 290: Filter Incoming Serialization Data 292: Implement Selected ECMAScript 6 Features in Nashorn 294: Linux/s390x Port 295: Ahead-of-Time Compilation