JDK版本侧重
链接:https://www.zhihu.com/question/60786248/answer/648058111
来源:知乎
简单版:
作者:然后变成一只猫
8:更加现代化
9:为模块化以及“瘦身做准备”
10:我稍微酱油一下
11:模块化,zgc,“开始瘦身”
12:忘了
详细版
作者:Genesis
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
java8
-
lambada表达式(Lambda Expressions)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
-
方法引用(Method references)。方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。
-
默认方法(Default methods)。默认方法允许将新功能添加到库的接口中,并确保兼容实现老版本接口的旧有代码。
-
重复注解(Repeating Annotations)。重复注解提供了在同一声明或类型中多次应用相同注解类型的能力。
-
类型注解(Type Annotation)。在任何地方都能使用注解,而不是在声明的地方。
-
类型推断增强。
-
方法参数反射(Method Parameter Reflection)。
-
Stream API 。新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。Stream API集成到了Collections API里。
-
HashMap改进,在键值哈希冲突时能有更好表现。
-
Date Time API。加强对日期和时间的处理。
-
java.util 包下的改进,提供了几个实用的工具类。
- 并行数组排序。
- 标准的Base64编解码。
- 支持无符号运算。
java.util.concurrent 包下增加了新的类和方法。
- java.util.concurrent.ConcurrentHashMap 类添加了新的方法以支持新的StreamApi和lambada表达式。
- java.util.concurrent.atomic 包下新增了类以支持可伸缩可更新的变量。
- java.util.concurrent.ForkJoinPool类新增了方法以支持 common pool。新
- 增了java.util.concurrent.locks.StampedLock类,为控制读/写访问提供了一个基于性能的锁,且有三种模式可供选择。
-
HotSpot 删除了 永久代(PermGen).方法调用的字节码指令支持默认方法。
java9
- java模块系统 (Java Platform Module System)。
- 新的版本号格式。 M A J O R . MAJOR. MAJOR.MINOR. S E C U R I T Y . SECURITY. SECURITY.PATCH
- java shell,交互式命令行控制台。
- 在private instance methods方法上可以使用@SafeVarargs注解。
- diamond语法与匿名内部类结合使用。
- 下划线_不能单独作为变量名使用。
- 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
- Javadoc
- 简化Doclet API。
- 支持生成HTML5格式。
- 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语。
- 支持新的模块系统。
- JVM
- 增强了Garbage-First(G1)并用它替代Parallel GC成为默认的垃圾收集器。
- 统一了JVM 日志,为所有组件引入了同一个日志系统。
- 删除了JDK 8中弃用的GC组合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
- properties文件支持UTF-8编码,之前只支持ISO-8859-1。
- 支持Unicode 8.0,在JDK8中是Unicode 6.2。
java10
- 局部变量类型推断(Local-Variable Type Inference)
//之前的代码格式
URL url = new URL("http://www.oracle.com/");
URLConnection conn = url.openConnection();
Reader reader =
new BufferedReader(new InputStreamReader(conn.getInputStream()))
//java10中用var来声明变量
var url = new URL("http://www.oracle.com/");
var conn = url.openConnection();
var reader =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
var是一个保留类型名称,而不是关键字。所以之前使用var作为变量、方法名、包名的都没问题,但是如果作为类或接口名,那么这个类和接口就必须重命名了。 var的使用场景主要有以下四种:
- 本地变量初始化。
- 增强for循环中。
- 传统for循环中声明的索引变量。
- Try-with-resources 变量。
- Optional类添加了新的方法orElseThrow。相比于已经存在的get方法,这个方法更推荐使用。
java11
支持Unicode 10.0,在jdk10中是8.0。标准化HTTP Client编译器线程的延迟分配。添加了新的命令-XX:+UseDynamicNumberOfCompilerThreads动态控制编译器线程的数量。新的垃圾收集器—ZGC。一种可伸缩的低延迟垃圾收集器(实验性)。Epsilon。一款新的实验性无操作垃圾收集器。Epsilon GC 只负责内存分配,不实现任何内存回收机制。这对于性能测试非常有用,可用于与其他GC对比成本和收益。Lambda参数的局部变量语法。java10中引入的var字段得到了增强,现在可以用在lambda表达式的声明中。如果lambda表达式的其中一个形式参数使用了var,那所有的参数都必须使用var。
java12
1、低暂停的垃圾收集器-Shenandoah
2、默认CDS归档通过在64位平台上的默认类列表的帮助下生成CDS归档来改进JDK构建过程,从而有效地消除了运行java -Xshare:dump。 此功能的目标包括:1。)改进开箱即用的启动时间,以及2.)摆脱使用-Xshare:dump。
3、Shenandoah GCShenandoah是一种垃圾收集(GC)算法,旨在保证低延迟(10 - 500 ms的下限)。 它通过在运行Java工作线程的同时执行GC操作减少GC暂停时间。 使用Shenandoah,暂停时间不依赖于堆的大小。 这意味着无论堆的大小如何,暂停时间都是差不多的。这是一个实验性功能,不包含在默认(Oracle)的OpenJDK版本中。
4、JMH 基准测试此功能为JDK源代码添加了一套微基准测试(大约100个),简化了现有微基准测试的运行和新基准测试的创建过程。 它基于Java Microbenchmark Harness(JMH)并支持JMH更新。此功能使开发人员可以轻松运行当前的微基准测试并为JDK源代码添加新的微基准测试。 可以基于Java Microbenchmark Harness(JMH)轻松测试JDK性能。 它将支持JMH更新,并在套件中包含一组(约100个)基准测试。
5、JVM 常量 API JEP 334引入了一个API,用于建模关键类文件和运行时artifacts,例如常量池。 此API将包括ClassDesc,MethodTypeDesc,MethodHandleDesc和DynamicConstantDesc等类。此 API 对于操作类和方法的工具很有帮助。
6、G1的可中断 mixed GC此功能通过将Mixed GC集拆分为强制部分和可选部分,使G1垃圾收集器更有效地中止垃圾收集过程。通过允许垃圾收集过程优先处理强制集,g1可以更多满足满足暂停时间目标。G1是一个垃圾收集器,设计用于具有大量内存的多处理器机器。由于它提高了性能效率,g1垃圾收集器最终将取代cms垃圾收集器。G1垃圾收集器的主要目标之一是满足用户设置的暂停时间。G1采用一个分析引擎来选择在收集期间要处理的工作量。此选择过程的结果是一组称为GC集的区域。一旦GC集建立并且GC已经开始,那么G1就无法停止。如果G1发现GC集选择选择了错误的区域,它会将GC区域的拆分为两部分(强制部分和可选部分)来切换到处理Mix GC的增量模式。如果未达到暂停时间目标,则停止对可选部分的垃圾收集。
7、G1归还不使用的内存此功能的主要目标是改进G1垃圾收集器,以便在不活动时将Java堆内存归还给操作系统。 为实现此目标,G1将在低应用程序活动期间定期生成或持续循环检查完整的Java堆使用情况。这将立即归还未使用的部分Java堆内存给操作系统。 用户可以选择执行FULL GC以最大化返回的内存量。
8、移除多余ARM64实现Java 12将只有一个ARM 64位实现(aarch64)。 目标是删除所有与arm64实现相关的代码,同时保留32位ARM端口和64位aarch64实现。这将把重点转移到单个64位ARM实现,并消除维护两个实现所需的重复工作。 当前的JDK 11实现中有两个64位ARM实现。