大家现在用的那个版本,是不是jdk8最后一个免费版本,
考虑用open jdk啦,升级那个版本比较靠谱呢。
Java 5
引入泛型功能(伪泛型)
增强循环,可以使用迭代循环,Iterator
支持自动装箱和自动拆箱
支持类型安全的枚举
支持可变参数
支持静态引入
支持元数据(注解)功能
引入Java Instrumentation
Java 6
支持脚本语言
引入JDBC 4.0 API
引入Java Compiler API
支持可插拔注解
Java 7
支持了switch语句以String作为条件,至此已支持4中基本类型(byte, char , short ,int),2种对象类型(枚举,String)
优化增强了泛型对象类型推断
支持了在一个语句块中捕获多种异常,既一个catch,可以|多个异常
支持try-with-resources语法,自动为资源类进行关闭,而无需finally进行
引入Java NIO2开发包,支持了AIO
支持了数值的二进制表示方式,比如0b1010000, 以前只能8,10,16进制的表示
钻石型语法,省略类型参数的声明
支持了动态语言
Java 8
支持lambda表达式
支持集合的Stream流处理
支持Functional函数式接口
对各个类支持了很多对应的lambda增强方法
增强接口,支持了接口的默认和静态的具体方法
支持LocalDate等时间包,以改进原有Date
支持Optional来改进Null值的处理
优化了HashMap和ConcurrentHashMap
Java 9
支持了HTTP/2客户端
支持Java平台级模块系统,既模块化
支持了JShell,既类似node.js, python一样的命令行工具,对待简单的东西,可以直接命令测试
改进Javadoc, 使得Javadoc可以搜索
集合的工厂方法,支持了List.of(), Set.of(), Map.of()的方式初始化不可变集合,省略了大量代码,语法糖
改进的Stream API,比如ofNullable(),dropWhile(),takeWhile()等
增强接口,支持了私有接口具体方法,补充了Java8默认和静态方法的支持
把G1垃圾收集器作为默认的垃圾收集器,并标注CMS为过时收集器
引入了响应式流Reactive Streams API, 支持了响应式编程
102: | Process API Updates | 进程 API 更新 | 110: | HTTP 2 Client | HTTP 2 客户端 | 143: | Improve Contended Locking | 改进竞争锁定 | 158: | Unified JVM Logging | 统一 JVM 日志记录 | 165: | Compiler Control | 编译器控制 | 193: | Variable Handles | 变量句柄 | 197: | Segmented Code Cache | 分段代码缓存 | 199: | Smart Java Compilation, Phase Two | 智能 Java 编译,第二阶段 | 200: | The Modular JDK | 模块化 JDK | 201: | Modular Source Code | 模块化源代码 | 211: | Elide Deprecation Warnings on Import Statements | 在导入语句中省略弃用警告 | 212: | Resolve Lint and Doclint Warnings | 解决 Lint 和 Doclint 警告 | 213: | Milling Project Coin | Milling Project Coin | 214: | Remove GC Combinations Deprecated in JDK 8 | 删除 JDK 8 中已弃用的 GC 组合 | 215: | Tiered Attribution for javac | javac 的分层归因 | 216: | Process Import Statements Correctly | 正确处理导入语句 | 217: | Annotations Pipeline 2.0 | 注释管道 2.0 | 219: | Datagram Transport Layer Security (DTLS) | 数据报传输层安全性 (DTLS) | 220: | Modular Run-Time Images | 模块化运行时图像 | 221: | Simplified Doclet API | 简化的 Doclet API | 222: | jshell: The Java Shell (Read-Eval-Print Loop) | jshell:Java Shell(读取-评估-打印循环) | 223: | New Version-String Scheme | 新版本字符串方案 | 224: | HTML5 Javadoc | HTML5 Javadoc | 225: | Javadoc Search | Javadoc 搜索 | 226: | UTF-8 Property Files | UTF-8 属性文件 | 227: | Unicode 7.0 | Unicode 7.0 | 228: | Add More Diagnostic Commands | 添加更多诊断命令 | 229: | Create PKCS12 Keystores by Default | 默认创建 PKCS12 密钥库 | 231: | Remove Launch-Time JRE Version Selection | 删除启动时 JRE 版本选择 | 232: | Improve Secure Application Performance | 提高安全应用程序性能 | 233: | Generate Run-Time Compiler Tests Automatically | 自动生成运行时编译器测试 | 235: | Test Class-File Attributes Generated by javac | 测试由 javac 生成的类文件属性 | 236: | Parser API for Nashorn | Nashorn 解析器 API | 237: | Linux/AArch64 Port | Linux/AArch64 端口 | 238: | Multi-Release JAR Files | 多版本 JAR 文件 | 240: | Remove the JVM TI hprof Agent | 删除 JVM TI hprof 代理 | 241: | Remove the jhat Tool | 删除 jhat 工具 | 243: | Java-Level JVM Compiler Interface | Java 级 JVM 编译器接口 | 244: | TLS Application-Layer Protocol Negotiation Extension | TLS 应用层协议协商扩展 | 245: | Validate JVM Command-Line Flag Arguments | 验证 JVM 命令行标志参数 | 246: | Leverage CPU Instructions for GHASH and RSA | 利用 GHASH 和 RSA 的 CPU 指令 | 247: | Compile for Older Platform Versions | 为旧平台版本编译 | 248: | Make G1 the Default Garbage Collector | 使 G1 成为默认垃圾收集器 | 249: | OCSP Stapling for TLS | 用于 TLS 的 OCSP 装订 | 250: | Store Interned Strings in CDS Archives | 在 CDS 档案中存储内部字符串 | 251: | Multi-Resolution Images | 多分辨率图像 | 252: | Use CLDR Locale Data by Default | 默认使用 CLDR 区域设置数据 | 253: | Prepare JavaFX UI Controls & CSS APIs for Modularization | 为模块化准备 JavaFX UI 控件和 CSS API | 254: | Compact Strings | 紧凑字符串 | 255: | Merge Selected Xerces 2.11.0 Updates into JAXP | 将选定的 Xerces 2.11.0 更新合并到 JAXP | 256: | BeanInfo Annotations | BeanInfo 注释 | 257: | Update JavaFX/Media to Newer Version of GStreamer | 将 JavaFX/Media 更新到 GStreamer 的较新版本 | 258: | HarfBuzz Font-Layout Engine | HarfBuzz 字体布局引擎 | 259: | Stack-Walking API | Stack-Walking API | 260: | Encapsulate Most Internal APIs | 封装大多数内部 API | 261: | Module System | 模块系统 | 262: | TIFF Image I/O | TIFF 图像 I/O | 263: | HiDPI Graphics on Windows and Linux | Windows 和 Linux 上的 HiDPI 图形 | 264: | Platform Logging API and Service | 平台日志记录 API 和服务 | 265: | Marlin Graphics Renderer | Marlin 图形渲染器 | 266: | More Concurrency Updates | 更多并发更新 | 267: | Unicode 8.0 | Unicode 8.0 | 268: | XML Catalogs | XML 目录 | 269: | Convenience Factory Methods for Collections | 集合的便利工厂方法 | 270: | Reserved Stack Areas for Critical Sections | 保留关键部分的堆栈区域 | 271: | Unified GC Logging | 统一 GC 日志记录 | 272: | Platform-Specific Desktop Features | 特定于平台的桌面功能 | 273: | DRBG-Based SecureRandom Implementations | 基于 DRBG 的 SecureRandom 实现 | 274: | Enhanced Method Handles | 增强的方法句柄 | 275: | Modular Java Application Packaging | 模块化 Java 应用程序打包 | 276: | Dynamic Linking of Language-Defined Object Models | 语言定义的对象模型的动态链接 | 277: | Enhanced Deprecation | 增强的弃用 | 278: | Additional Tests for Humongous Objects in G1 | G1 中巨大对象的附加测试 | 279: | Improve Test-Failure Troubleshooting | 改进测试失败故障排除 | 280: | Indify String Concatenation | 指示字符串连接 | 281: | HotSpot C++ Unit-Test Framework | HotSpot C++ 单元测试框架 | 282: | jlink: The Java Linker | jlink:Java 链接器 | 283: | Enable GTK 3 on Linux | 在 Linux 上启用 GTK 3 | 284: | New HotSpot Build System | 新的 HotSpot 构建系统 | 285: | Spin-Wait Hints | Spin-Wait 提示 | 287: | SHA-3 Hash Algorithms | SHA-3 哈希算法 | 288: | Disable SHA-1 Certificates | 禁用 SHA-1 证书 | 289: | Deprecate the Applet API | 弃用 Applet API | 290: | Filter Incoming Serialization Data | 过滤传入的序列化数据 | 291: | Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector | 弃用并发标记清除 (CMS) 垃圾收集器 | 292: | Implement Selected ECMAScript 6 Features in Nashorn | 在 Nashorn 中实现选定的 ECMAScript 6 功能 | 294: | Linux/s390x Port | Linux/s390x 端口 | 295: | Ahead-of-Time Compilation | 提前编译 | 297: | Unified arm32/arm64 Port | 统一 arm32/arm64 端口 | 298: | Remove Demos and Samples | 删除演示和示例 | 299: | Reorganize Documentation | 重新组织文档 | |
Java 10
支持了局部变量的类型推导,支持了局部变量的var声明
优化改进了G1垃圾回收器,采用并行化mark-sweep-compact算法
286: | 本地变量类型推断 | Local-Variable Type Inference | 296: | 将 JDK 森林合并到一个存储库中 | Consolidate the JDK Forest into a Single Repository | 304: | 垃圾收集器接口 | Garbage-Collector Interface | 307: | G1 的并行完整 GC | Parallel Full GC for G1 | 310: | 应用程序类数据共享 | Application Class-Data Sharing | 312: | 线程本地握手 | Thread-Local Handshakes | 313: | 删除 Native-Header生成工具 (javah) | Remove the Native-Header Generation Tool (javah) | 314: | 附加 Unicode 语言标签扩展 | Additional Unicode Language-Tag Extensions | 316: | 替代存储设备上的堆分配 | Heap Allocation on Alternative Memory Devices | 317: | 实验性基于 Java 的 JIT 编译器 | Experimental Java-Based JIT Compiler | 319: | 根证书 | Root Certificates | 322: | 基于时间的发布版本控制 | Time-Based Release Versioning | |
Java 11
简化了启动单个源代码文件的方法,使得小白命令式编译运行Java文件变成更加简单,java Helloworld.java 即可
增加支持了一个叫Epsilon的低开销垃圾收集器
增加支持了一个叫ZGC(Z Garbage Collector)的可伸缩低延迟垃圾收集器, 相比G1,停顿时间有了很大的改进,稳定在10ms以下
重写了HttpClient,提供了新的标准化HttpClient API, 以后不再需要引入apache包的HttpClient或是okhttp就能支持高性能的网络5.编程
增加了对TLS 1.3的支持
允许了飞行记录器进行商用下的使用
更好的支持了动态语言,在JVM层面增加了invokedynamic指令
支持了在lambda内部使用var声明局部变量
181: | Nest-Based Access Control | 基于嵌套的访问控制 | 309: | Dynamic Class-File Constants | 动态类文件常量 | 315: | Improve Aarch64 Intrinsics | 改进 Aarch64 内在函数 | 318: | Epsilon: A No-Op Garbage Collector | Epsilon:无操作垃圾收集器 | 320: | Remove the Java EE and CORBA Modules | 删除 Java EE 和 CORBA 模块 | 321: | HTTP Client (Standard) | HTTP 客户端(标准) | 323: | Local-Variable Syntax for Lambda Param | 本地变量Lambda 参数的语法 | 324: | Key Agreement with Curve25519 and Curv | 与 Curve25519 和 Curve448 的密钥协议 | 327: | Unicode 10 | Unicode 10 | 328: | Flight Recorder | 飞行记录器 | 329: | ChaCha20 and Poly1305 Cryptographic Al | ChaCha20 和 Poly1305 加密算法 | 330: | Launch Single-File Source-Code Program | 启动单文件源代码程序 | 331: | Low-Overhead Heap Profiling | 低开销堆分析 | 332: | Transport Layer Security (TLS) 1.3 | 传输层安全 (TLS) 1.3 | 333: | ZGC: A Scalable Low-Latency Garbage Co | ZGC:可扩展的低延迟垃圾收集器(实验性) | 335: | Deprecate the Nashorn JavaScript Engin | 弃用 Nashorn JavaScript 引擎 | 336: | Deprecate the Pack200 Tools and API | 弃用 Pack200 工具和 API | |
Java 12
引入了一个叫Shenandoah 低停顿的实验性垃圾收集器
改进了G1垃圾收集器
引入了实验性的预览版Switch语句优化,可以省略break语句,合并多个case
引入了JVM的常量API, 有助于一些分析的实现
Java 13
增强优化了ZGC垃圾收集器, 归还未使用的堆内存给操作系统
将Java12引入的预览版Switch语法提为正式版,使得Switch的使用更加的顺滑和流畅
支持了"""字符串块功能
Java 14
通过实施 NUMA 感知内存分配来提高大型机器上的 G1 性能。
NPE精确描述产生异常的变量
switch表达式增强,支持 case 表达式 -> 逻辑
删除CMS垃圾收集器
Java 15
引入隐藏类,即不能被其他类的字节码直接使用的类,独立其他类卸载
禁用偏向锁,现有并发集合和线程池等应用方式,偏向锁优化不再适用
垃圾收集器 ZGC 更改为生产状态
垃圾收集器 Shenandoah 更改为生产状态
Java 16
instanceof 的增强,可以直接拿到对应实例类型引用,不需要再自己去做强制转换
ZGC垃圾收集器优化
更及时地将未使用的 HotSpot 类元数据(即元空间)内存返回给操作系统,减少元空间占用,并简化元空间代码以降低维护成本。
Java 17
增强伪随机数生成器
密封类,抽象类可用指定实现类,之外的类不可继承
Java 18
简单的网络服务器
Java 19
Java 20
开发中,未发布
tobe continue
问题
Q:feature前面的编号是是干嘛的?
A: 你可以直接https://openjdk.org/jeps/[编号] 查看详细介绍