经过4次的跳票,历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统,在最初设想的时候并没有想过那么复杂,花费的时间超出预估时间。距离java8大约三年时间。
Java9提供了超过150项新功能特性,包括备受期待的模块化系统、可交互的REPL工具:jshell、JDK编译工具、语法层面的改变、Java公共API和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。
但是这个巨大改变的功劳,都给了java11了,目前oracle对8、11都长期支持,9、10不支持了,只能从历史版本(http://jdk.java.net/)中下载,Java11将会获得Oracle提供的长期支持服务,直至2026年9月。
从Java9这个版本开始,Java的计划发布周期是6个月,下一个Java的主版本将于2018年3月发布,命名为Java18.3(java10), 紧接着再过六个月将发布Java18.9(java11).
这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的(6个月为周期)发布模式(更快的时间周期,oracle的理念就是小步快跑,快速迭代,像IBM(DB2数据库,保守型内部测试才投入市场)),并逐步的将Oracle JDK原商业特性进行开源。针对企业客户的需求,Oracle将以三年为周期发布长期支持版本(long term support)。
Java9新特性
- 模块化系统
- jShell命令
- 多版本兼容jar包
- 接口的私有方法
- 钻石操作符的使用升级
- 语法改进:try语句
- String存储结构变更
- 便利的集合特性:of()
- 增强的Stream API
- 全新的HTTP客户端API
- Deprecated的相关API
- javadoc的HTML 5支持
- Javascript引擎升级:Nashorn
- java的动态编译器
官方提供的新特性列表:
https://docs.oracle.com/javase/9/whatsnew/toc.htm
或参考 Open JDK
http://openjdk.java.net/projects/jdk9/
在线Oracle JDK 9 Documentation
https://docs.oracle.com/javase/9/
JDK与JRE的关系
JDK(Java Development Kit)是Java开发环境,它不仅包含了JRE中的所有内容,即JVM和Java类库等支持Java运行时的所有组件,还包括了Java编译器(javac)、Java文档工具(javadoc)等开发工具以及示例代码和库。因此,JDK是开发Java程序的必备工具,为Java开发提供了丰富的开发工具和类库,方便开发人员进行Java应用程序的开发、测试和调试。
JRE(Java Runtime Environment)是Java运行时环境,它包括JVM以及Java类库等支持Java运行时的所有组件。JRE是运行Java程序所必须的,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。
说明:
- JDK = JRE + 开发工具集(例如 Javac 编译工具等)
- JRE = JVM + Java SE 标准类库
java8的目录结构
jdk1.8.0_401/
├── COPYRIGHT
├── LICENSE
├── README.html
├── THIRDPARTYLICENSEREADME-JAVAFX.txt
├── THIRDPARTYLICENSEREADME.txt
├── bin
├── include
├── javafx-src.zip
├── jmc.txt
├── jre
├── jvisualvm.txt
├── legal
├── lib
├── man
├── release
└── src.zip
目录说明如下:
- bin:包含命令行开发和调试工具,如javac、jar、javadoc
- include:包含编译本地代码时使用的c/c++头部文件
- lib:包含JDK工具的几个jar和其他类型的文件,他有一个tools.jar文件,其中含javac编译器的java类
- jre/bin:包含基本指令,如java指令,在windows平台上,它包含系统的运行时动态链接
- jre/lib:包含用户可编辑的配置文件,如properties和.policy文件,包含几个jar文件,rt.jar文件包含运行时的java类和资源文件
java9的目录结构
jdk-9.0.4
├── README.html
├── bin
├── conf
├── include
├── jmods
├── legal
├── lib
└── release
目录说明如下:
- bin:包含所有指令,在windows平台上,他继续包含系统的运行时动态链接
- conf:包含用户可编辑的配置文件,例如之前位于jre/lib目录中的.properties和policy
- includes:包含在以前编译本地代码时使用c/c++头文件,他只存在于JDK中
- jmods:包含JMOD格式的平台模块,创建自定义运行时映像需要他,它只存在于jdk中
- legal:法律声明
- lib:包含非windows平台上的动态链接本地库,其子目录和文件不应由开发人员直接编译或使用
没有名为jre的子目录了。