1. 程式人生 > >jdk 9 新特性

jdk 9 新特性

2017年7月,甲骨文發表Java SE 9。

Java 9中主要的變化是已經實現的模組化系統。

Modularity提供了類似於OSGI框架的功能,模組之間存在相互的依賴關係,可以匯出一個公共的API,並且隱藏實現的細節,Java提供該功能的主要的動機在於,減少記憶體的開銷,在JVM啟動的時候,至少會有30~60MB的記憶體載入,主要原因是JVM需要載入rt.jar,不管其中的類是否被classloader載入,第一步整個jar都會被JVM載入到記憶體當中去,模組化可以根據模組的需要載入程式執行需要的class。

在引入了模組系統之後,JDK 被重新組織成 94 個模組。Java 應用可以通過新增的 jlink 工具,創建出只包含所依賴的 JDK 模組的自定義執行時映象。這樣可以極大的減少 Java 執行時環境的大小。使得JDK可以在更小的裝置中使用。採用模組化系統的應用程式只需要這些應用程式所需的那部分JDK模組,而非是整個JDK框架了。

HTTP/2

JDK9之前提供HttpURLConnection API來實現Http訪問功能,但是這個類基本很少使用,一般都會選擇Apache的Http Client,此次在Java 9的版本中引入了一個新的package:java.net.http,裡面提供了對Http訪問很好的支援,不僅支援Http1.1而且還支援HTTP2(什麼是HTTP2?請參見HTTP2的時代來了…),以及WebSocket,據說效能特別好。

在這裡插入圖片描述JShell

用過Python的童鞋都知道,Python 中的讀取-求值-列印迴圈( Read-Evaluation-Print Loop )很方便。它的目的在於以即時結果和反饋的形式。

java9引入了jshell這個互動性工具,讓Java也可以像指令碼語言一樣來執行,可以從控制檯啟動 jshell ,在 jshell 中直接輸入表示式並檢視其執行結果。當需要測試一個方法的執行效果,或是快速的對錶達式進行求值時,jshell 都非常實用。

除了表示式之外,還可以建立 Java 類和方法。jshell 也有基本的程式碼完成功能。我們在教人們如何編寫 Java 的過程中,不再需要解釋 “public static void main(String [] args)” 這句廢話。

java9的垃圾收集機制

Java 9 移除了在 Java 8 中 被廢棄的垃圾回收器配置組合,同時把G1設為預設的垃圾回收器實現。替代了之前預設使用的Parallel GC,對於這個改變,evens的評論是醬紫的:這項變更是很重要的,因為相對於Parallel來說,G1會在應用執行緒上做更多的事情,而Parallel幾乎沒有在應用執行緒上做任何事情,它基本上完全依賴GC執行緒完成所有的記憶體管理。這意味著切換到G1將會為應用執行緒帶來額外的工作,從而直接影響到應用的效能

I/O 流新特性

java.io.InputStream 中增加了新的方法來讀取和複製 InputStream 中包含的資料。

readAllBytes:讀取 InputStream 中的所有剩餘位元組。

readNBytes: 從 InputStream 中讀取指定數量的位元組到陣列中。

transferTo:讀取 InputStream 中的全部位元組並寫入到指定的 OutputStream 中 。

除了上面這些以外,還有以下這麼多的新特性,不再一一介紹。

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

作者:互扯程式
來源:CSDN
原文:https://blog.csdn.net/mxw2552261/article/details/79080678
版權宣告:本文為博主原創文章,轉載請附上博文連結!