JDK总览
jdk 源码也是非常庞大的,可以分模块来阅读,下面是建议的阅读顺序:
- java.lang 包下的基本包装类(Integer、Long、Double、Float 等),还有字符串相关类(String、StringBuffer、StringBuilder 等)、常用类(Object、Exception、Thread、ThreadLocal 等)。
- java.lang.ref 包下的引用类(WeakReference、SoftReference 等)
- java.lang.annotation 包下的注解的相关类
- java.lang.reflect 包下的反射的相关类
- java.util 包下为一些工具类,主要由各种容器和集合类(Map、Set、List 等)
- java.util.concurrent 为并发包,主要是原子类、锁以及并发工具类
- java.io 和 java.nio 可以结合着看
- java.time 主要包含时间相关的类,可以学习下 Java 8 新增的几个
- java.net 包下为网络通信相关的类,可以阅读下 Socket 和 HTTPClient 相关代码
各种JDK
OracleJDK OracleJDKhttps://www.oracle.com/java/technologies/javase-downloads.html
Oracle公司成立于1977年,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。2009年就以7.4B$收购了Sun公司。2013年超越 IBM ,成为 继 Microsoft 后全球第二大软件公司。 警告:生产环境中OracleJDK的使用请注意法律风险!
OpenJDK: OpenJDKhttp://openjdk.java.net
OpenJDK原是Sun Microsystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码。 Sun Microsystems公司在2006年的JavaOne大会上称将对Java开放源代码,于2009年4月15日正式发布OpenJDK。 甲骨文在2010年收购Sun Microsystem之后接管了这个项目。
RedHatOpenJDK: RedHatOpenJDKhttps://developers.redhat.com/products/openjdk/download RedHat开源扛把子红帽出品,值得信赖。仅有windows。Linux请从源里下载。仅更新最新维护版。
AdoptOpenJDK: AdoptOpenJDKhttps://adoptopenjdk.net 2017年开始采用OpenJDK.net,建立在多个平台上普遍缺乏一个开放的、可复制的OpenJDK源代码构建和测试系统。 adoptionopenjdk为Java生态系统提供了坚如磐石的OpenJDK二进制文件,还为任何平台上的OpenJDK构建者提供了作为代码的基础设施和构建场。
Dragonwell: Dragonwellhttps://github.com/alibaba/dragonwell8 作为OpenJDK的下游,alibaba Dragonwell是阿里巴巴内部OpenJDK定制版AJDK的开源版本,AJDK为在线电商、金融、物流做了结合业务场景的优化,运行在超大规模的,100,000+ 服务器的阿里巴巴数据中心。 国产之光,大家有机会还是尝试下优化的还不错,相对于OpenJDK更省内存和并发更高启动更快,作者测试过
GraalVM: GraalVMhttps://www.graalvm.org GraalVM是一个通用的虚拟机,用于运行以JavaScript、Pytho n、Ruby、R、JVM等语言编写的应用程序,如Java、Scala、Groovy、Kotlin 、Crojule和基于LLVM的语言,如C和C++。GraalVM消除了编程语言之间的隔离,并在共 享运行时启用互操作性。它可以独立运行,也可 以在OpenJDK、Node.js或Oracle数据库的上下文中运行。
ZuluJDK: ZuluJDKhttps://www.azul.com/downloads/zulu-community/?&architecture=x86-64-bit&package=jdk# Azul Systems为需要为其面向网络的客 户(旅游、在线零售、游戏、SaaS)提供基于服务器的Java应 用程序的公司提供服务,满足实时业务系统(广告网络、资本市场、通信)的特定 延迟目标,确保对重要应用程序进行及时维护或安全更新,或者为嵌入式和物联网用例提 供基于Java的系统。
Liberica: Libericahttps://bell-sw.com/pages/downloads/#/java-14-current Liberica是一个100% 开源Java实现。它是由BellSoft贡献的O penJDK构建的,经过了彻底的测试,并通过了OpenJDK许可下 提供的JCK。Standard为常规用途,full版本包含JavaFX,lite为精简的OpenJDK。文件体积Full > Standard > lite。
SapMachine: SapMachinehttps://sap.github.io/SapMachine SAP SE是一家 德国跨国软件公司,它生产企业软件 来管理业务运营和客户关系。SAP总部位于德国巴登-符腾 堡的沃尔多夫,在180个国家设有区域办事处。SapMachine是OpenJDK 项目的下游版本。它用于为希望使用OpenJDK运行其应用程序的SAP客户和合作伙 伴构建和维护支持SAP的OpenJDK版本。SAP致力于确保Java平台的持续成功。
Corretto: Correttohttps://amazonaws-china.com/cn/corretto Amazon Corretto是一个免费的 、多平台的、面向生产的开放Java开发工具包(OpenJDK) 发行版。Corretto提供长期支持,包括性能增强和安全修复。亚马逊在数 个生产服务上运行Corretto,并且Corretto被证明与Java SE标准兼容。使用Corretto,您 可以在流行的操作系统(包括Linux、Windows和macOS)上开发和运行Java应用程序。
JDK 新特性总览
JDK4
- 正则表达式
- 异常链
- NIO
- 日志类
- XML解析器
- XLST转换器
JDK5
- 自动装箱与拆箱
- 枚举
- 静态导入
- 可变参数(Varargs)
- 内省(introspector)
- 泛型(Generic)
- For-Each循环
JDK6
- Desktop类和SystemTray类
- 使用JAXB2来实现对象与XML之间的映射
- 理解STAX
- 使用Compiler API
- 轻量级 Http Server API
- 插入式注解处理 API
- 使用Console开发控制台程序
- 对脚本语言的支持
- Common Annotations
- Java GUI界面的显示
- 嵌入式数据库Derby
- Web服务元数据
- Jtable的排序和过滤
- 更简单更强大的JAX-WS
- 改进JVM的锁,同步垃圾回收,类加载
JDK7
- 支持二进制数字 0b
- switch中可以使用字符串了
- 泛型实例化类型自动推断,调用泛型类的构造方法时,可以省去泛型参数,编译器会自动判断。
- 自定义自动关闭类
- 新增一些读取环境信息的工具方法
- Boolean类型反转,空指针安全,参与位运算
- 两个char之间的equals
-
安全的加减乘除 sd - 对Java集合( Collections)的增强支持
- 数值可加下划线
- 支持二进制数字
-
在try/catch异常扑捉中,一个catch可以写多个异常类型用 隔开 - 可以不必要写finally语句来关闭资源,只要你在try()的括号内部定义要使用的资源
- 提供GI收集器
JDK8
- 接口的默认方法
- Lambda表达式
- 函数式接口
- 方法与构造函数引用
- 扩展了集合类
- 新的Date API
- Annotation多重注解
- streams(流)
- parallel streams(并行流)
- Map数据结构改进
- Nashorn JavaScript 引擎
- Optional 类
JDK9
- Jigsaw模块化项目
- 简化进程API
- 轻量级JSON API
- 钱和货币的API
- 改善锁竞争机制
- 代码分段缓存
- 智能java编译
- http2.0客户端
- kulla计划
- 交互式编程环境, REPL(JShell)
- String底层存储结构的变更(char数组变成byte字节数组)
JDK10
- 局部变量的类型推断
- GC改进和内存管理
- 线程本地握手
- 备用内存设备上的堆分配
- 其他Unicode语言 - 标记扩展
- 基于Java的实验性JIT编译器
- 开源根证书
- 根证书颁发认证(CA)
- 将JDK生态整合单个存储库
- 删除工具javah
JDK11
- 181 嵌套类可见性控制
- 309 动态文件常量
- 315 改进 Aarch64 Intrinsics
- 318 Epsilon–一个无操作的垃圾收集器
- 320 删除 Java EE 和 CORBA 模块
- 321 HttpClient
- 323 用于 Lambda 参数的局部变量语法
- 324 Curve25519 和 Curve448 算法的密钥协议
- 327 Unicode 10
- 328 Flight Recorder(飞行记录器)
- 329 haCha20 和 Poly1305 加密算法支持
- 330 Launch Single-File Source-Code Programs(启动单一文件的源代码程序)
- 331 低开销的 Heap Profiling
- 332 TLS 1.3支持
- 333 ZGC: A Scalable Low-Latency Garbage Collector(可伸缩低延迟垃圾收集器)
- 335 弃用 Nashorn JavaScript 引擎
- 336 弃用 Pack200 工具和 API
JDK12
- Switch Expressions
- Shenandoah GC;
JDK13
- switch优化更新
- 文本块升级;
- 重新实现旧版套接字API;
- 核心库/java.util中:I18N;
- 取消使用未使用的内存
JDK14
- switch优化变更为最终版;
- 垃圾回收相关;
- instanceof的模式匹配(预览版);
- 删除了安全库java.security.acl API;
- 货币格式(优化)
JDK15
- ZGC 一种可扩展低延迟垃圾收集器
- 模式匹配的 instanceof
- Record
- 改进的序列化处理
- 优化空子字符串处理
- 支持 Unicode 13.0
JDK16
- 一些在JDK14中引入的新特性,最终在JDK16中确定了。
- 内存管理的提升
- 新的打包工具
- UNIX-Domain Socket channels
- Value-based Classes的警告
- Encapsulating JDK Internals by default
- 提供了 C++ 14语言特性
- 其他的一些预览版本的新特性
JDK17
- 356:增强型伪随机数发生器
- 382:新增macOS渲染管道
- 398:弃用待移除的Applet API
- 403:强封装JDK内部API
- 411:弃用待移除的安全管理器(Security Manager)
- 412:外部函数和内存API(孵化器)孵化阶段
JDK18
- UTF-8 by Default 默认使用UTF-8字符编码
- Simple Web Server 简单Web服务器
- Code Snippets in Java API Documentation API文档支持代码片断
- Reimplement Core Reflection with Method Handles 重构反射的实现
- Vector API (Third Incubator) 向量API(孵化第三版)
- Internet-Address Resolution SPI 网络地址解析 SPI
- Foreign Function & Memory API (Second Incubator) 外部函数&内存API (孵化第二版)
- Pattern Matching for switch (Second Preview) switch模式自动匹配(预览第二版)
- Deprecate Finalization for Removal 将Finalization标记为过期
JDK19
- 405:Record Patterns (Preview) 记录模式
- 422:Linux/RISC-V Port Linux/RISC-V 移植
- 424:Foreign Function & Memory API (Preview) 外部函数和内存 API
- 425:Virtual Threads (Preview) 虚拟线程
- 426:Vector API (Fourth Incubator) 向量 API
- 427:Pattern Matching for switch (Third Preview) Switch 模式匹配
- 428:Structured Concurrency (Incubator) 结构化并发
JDK20
- 429:Scoped Values (Incubator)
- 432:Record Patterns (Second Preview) 记录模式
- 433:Pattern Matching for switch (Fourth Preview) switch语句的模式匹配
- 434:Foreign Function & Memory API (Second Preview) 外部函数&内存(FFM)API
- 436:Virtual Threads (Second Preview) 虚拟线程
- 437:Structured Concurrency (Second Incubator) 结构化并发
JVM GC变化
- JDK9: 设置G1为JVM默认垃圾收集器
- JDK10:并行全垃圾回收器 G1,通过并行Full GC, 改善G1的延迟。目前对G1的full GC的实现采用了单线程-清除-压缩算法。JDK10开始使用并行化-清除-压缩算法。
- JDK11:推出ZGC新一代垃圾回收器(实验性),目标是GC暂停时间不会超过10ms,既能处理几百兆的小堆,也能处理几个T的大堆。
- JDK14 :删除CMS垃圾回收器;弃用 ParallelScavenge + SerialOld GC 的垃圾回收算法组合;将 zgc 垃圾回收器移植到 macOS 和 windows 平台
- JDk 15 : ZGC (JEP 377) 和Shenandoah (JEP 379) 不再是实验性功能。默认的 GC 仍然是G1。
- JDK16:增强ZGC,ZGC获得了 46个增强功能 和25个错误修复,控制stw时间不超过10毫秒