【库学科技】Java 9 的特点有哪些令我们心动?

本文来源于网络,侵删。

在介绍 Java 9 之前,咱们先来看看 Java 建立到现在的一切版别。

  • 1990 年头,开始被命名为 Oak;

  • 1995 年 5 月 23 日,Java 言语诞生;

  • 1996 年 1 月,第一个 JDK-JDK 1.0 诞生;

  • 1996 年 4 月,10 个最主要的操作系统供货商声明将在其产品中嵌入 Java 技能;

  • 1996 年 9 月,约 8.3 万个网页应用了 Java 技能来制造;

  • 1997 年 2 月 18 日,JDK 1.1 发布;

  • 1997 年 4 月 2 日,JavaOne 会议举行,参与者逾一万人,创其时全球同类会议纪录;

  • 1997 年 9 月,JavaDeveloperConnection 社区成员超越十万;

  • 1998 年 2 月,JDK1.1 被下载超越 2,000,000 次;

  • 1998 年 12 月 8 日,Java 2 企业渠道 J2EE 发布;

  • 1999 年 6 月,SUN 公司发布 Java 三个版别:标准版(J2SE)、企业版(J2EE)和微型版(J2ME);

  • 2000 年 5 月 8 日,JDK 1.3 发布;

  • 2000 年 5 月 29 日,JDK 1.4 发布;

  • 2001 年 6 月 5 日,Nokia 宣告到 2003 年将出售 1 亿部支撑 Java 的手机;

  • 2001 年 9 月 24 日,J2EE 1.3 发布;

  • 2002 年 2 月 26 日,J2SE1.4 发布,尔后 Java 的核算才能有了大幅提高;

  • 2004 年 9 月 30 日,J2SE1.5 发布,成为 Java 言语开展史上的又一里程碑。为了表明该版别的重要性,J2SE1.5 更名为 Java SE 5.0;

  • 2005 年 6 月,JavaOne 大会举行,SUN 公司揭露 Java SE 6。此刻,Java 的各种版别现已更名,以撤销其间的数字“2”:J2EE 更名为 Java EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME;

  • 2006 年 12 月,SUN 公司发布 JRE6.0;

  • 2009 年 4 月 20 日,甲骨文以 74 亿美元的价格收买 SUN 公司,获得 java 的版权,业界风闻说这对 Java 程序员是个坏消息(其实恰恰相反);

  • 2010 年 11 月,因为甲骨文对 Java 社区的不友善,因而 Apache 扬言将退出 JCP;

  • 2011 年 7 月 28 日,甲骨文发布 Java SE 7;

  • 2014 年 3 月 18 日,甲骨文宣布 Java SE 8;

  • 2017 年 7 月,甲骨文宣布 Java SE 9。

写在前面

依照 Java 1995 年正式诞生起到现在,现已快 23 年了。比我年纪都大(我今日刚满 18 岁)。Java 现已陪我走过了十几个年初了,当年我用的第一个版别应该是 J2SE1.4(完了,暴露了)。其实现在好多人还在用 Java SE 6,还有一部分人 Java SE 8 还没玩理解呢,Java SE 9 现已粉末上台了。在 Open JDK 的官网上看到了 Java 10 的规范也在拟定傍边,Java 的开展真的越来越快了。

modularity System 模块体系

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 的 HttpClient,此次在 Java 9 的版别中引入了一个新的 package:java.net.http,里边供给了对 HTTP 拜访很好的支撑,不只支撑 HTTP 1.1 并且还支撑 HTTP 2(什么是 HTTP2?请拜见

注意:新的 HttpClient API 在 Java 9 中以所谓的孵化器模块交付。也就是说,这套 API 不能保证 100% 完成。

JShell

用过 Python 的童鞋都知道,Python 中的读取-求值-打印循环( Read-Evaluation-Print Loop )很便利。它的意图在于以即时成果和反应的方式。

Java9 引入了 JShell 这个交互性东西,让 Java 也能够像脚本语言相同来运转,能够从控制台发动 JShell ,在 JShell 中直接输入表达式并检查其履行成果。当需求测验一个办法的运转作用,或是快速的对表达式进行求值时,JShell 都十分有用。

除了表达式之外,还能够创立 Java 类和办法。jshell 也有根本的代码完结功用。咱们在教人们怎么编写 Java 的过程中,不再需求解说 “public static void main(String [] args)” 这句废话。

不可变调集工厂办法

Java 9 增加了 List.of()、Set.of()、Map.of()和 Map.ofEntries()等工厂方法来创立不可变调集。

List

除了更短和更好阅览之外,这些办法也能够防止您挑选特定的调集完成。在创立后,持续增加元素到这些调集会导致 “UnsupportedOperationException”。

私有接口办法

Java 8 为咱们供给了接口的默许办法和静态办法,接口也能够包括行为,而不仅仅是办法界说。

默许办法和静态办法能够同享接口中的私有办法,因而避免了代码冗余,这也使代码愈加明晰。假如私有办法是静态的,那这个办法就归于这个接口的。而且没有静态的私有办法只能被在接口中的实例调用。

HTML5 风格的 Java 协助文档

Java 8 之前的版别生成的 Java 协助文档是在 HTML 4 中。在 Java 9 中,Javadoc 的输出现在契合兼容 HTML5 规范。现在 HTML 4 是默许的输出符号言语,但是在之后发布的 JDK 中,HTML 5 将会是默许的输出符号言语。

Java 协助文档仍是由三个结构组成的结构构成,这是不会变的,而且以 HTML 5 输出的 Java 协助文档也坚持相同的结构。每个 Javadoc 页面都包括有关 JDK 模块类或接口来历的信息。

image

多版别兼容 JAR

当一个新版别的 Java 呈现的时分,你的库用户要花费很长时刻才会切换到这个新的版别。这就意味着库要去向后兼容你想要支撑的最老的 Java 版别 (许多情况下便是 Java 6 或许 7)。这实际上意味着未来的很长一段时刻,你都不能在库中运用 Java 9 所供给的新特性。走运的是,多版别兼容 JAR 功用能让你创立仅在特定版别的 Java 环境中运行库程序时挑选运用的 class 版别:


multirelease.jar├── META-INF│

在上述场景中,multirelease.jar 能够在 Java 9 中运用, 不过 Helper 这个类运用的不是顶层的 multirelease.Helper 这个 class, 而是处在“META-INF/versions/9”下面的这个。这是特别为 Java 9 预备的 class 版别,能够运用 Java 9 所供给的特性和库。一起,在前期的 Java 诸版别中运用这个 JAR 也是能运转的,由于较老版别的 Java 只会看到顶层的这个 Helper 类。

一致 JVM 日志

Java 9 中 ,JVM 有了一致的日志记载体系,能够运用新的命令行选项-Xlog 来操控 JVM 上 一切组件的日志记载。该日志记载体系能够设置输出的日志音讯的标签、等级、修饰符和输出方针等。

Java 9 的废物搜集机制

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

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


库学科技成立于2009年,是一家综合性的互联网公司,公司总部在北京大兴区,公司的主要业务涉互联网软件开发,数据库、人工智能、新媒体运营等领域,主要是为国内的中大型互联网公司,提供技术人员的定向入职输送,与国内大型企业做联合定岗招聘,与岗位需求相结合通过短期实训达到企业岗位要求的合格的工程师。


你可能感兴趣的:(【库学科技】Java 9 的特点有哪些令我们心动?)