参考官方release note,主要摘取各版本比较重要的特性,翻译水平有限,如有纰漏欢迎指出。
JDK6
- 语法部分
- 实现接口方法时,可以加@override注解了,JDK5会报错
- JVM部分
- Parallel Compaction 并行压缩(ParallelOld收集器),新的老年代收集器,启用参数:-XX:+UseParallelOldGC
- CMS优化:新提出并发System.gc()的概念,避免显式调用System.gc()的长停顿(和CMS的原则冲突),让CMS收集器来控制FullGc
-XX:+ExplicitGCInvokesConcurrent- 最小新生代空间从4M提升为16M
JDK7
- 语法部分
- 字符串可作为switch表达式条件
- diamond:实例化时构造方法泛型参数可留空不必填写,编译器会自动推断。<>双尖括号戏称“钻石”
- JVM部分
- 新的G1垃圾收集器(试验中),计划替代CMS
JDK8 大版本
- 语法部分
- Lambda表达式,简化文法
- 接口加入default方法,新的default关键字
- Stream API ,处理集合很方便
- 提升HashMap查找性能:老版本,冲突键位置的节点均形成链表,查找复杂度为O(N),JDK8后,节点达到8个(TREEIFY_THRESHOLD)后转红黑树,查找效率是O(logN)
- 数组排序的sort方法
- 新的Base64工具包:
Base64.Encoder base64Encoder = Base64.getEncoder();
String encodedStr = base64Encoder.encodeToString(buffer);
- 并发包中加入多个新方法
- JVM部分
- 移除永久代PermGen,以MetaSpace代替(JVM自动管理)
- 新的字节码指令,以支持接口default方法
JDK9
- 模块系统:jar包改为jmod文件,module-info.class文件放在每个模块根目录,来注明依赖关系,rt.jar和tools.jar移除,拆分到了新的模块中。
- 进一步改进G1收集器性能,G1作为默认收集器
- 以下GC的搭配被废弃了,已不可用
- DefNew + CMS
- ParNew + SerialOld
- Incremental CMS
- 开始废弃CMS收集器,继续使用会有警告
- 集合创建时使用of工厂方法,更方便
- Deprecated注解现在可标注起始版本,@Deprecated(since=“9”, forRemoval=true)
- 接口中可添加private方法了,实现类无法实现,可供同接口的default方法调用。
JDK10
- G1性能增强:支持并行FullGc(与JDK6时CMS支持此特性类似)
- 提升Java在Docker容器的性能,更好的支持Docker环境运行
- var关键字,自动推断类型
JDK11 LTS版本
- 支持Unicode 10
- HTTP Client 标准化收录
- Collection接口加入默认方法toArray
- (试验)新的ZGC收集器,可控、低延迟:用户线程暂停不超10毫秒
- (试验)Epsilon收集器,(只管内存分配?我还不了解)
- Lambda表达式支持var关键字
- 移除Thread类的destroy() 和 stop() 方法
JDK12
- 支持Unicode 11
- ZGC支持类卸载
JDK13
- 支持Unicode 12.1
- ZGC支持退还未用堆内存给操作系统
- ZGC最大支持16TB的堆内存