JDK版本侧重(收集于知乎问题)

JDK版本侧重

链接:https://www.zhihu.com/question/60786248/answer/648058111
来源:知乎

简单版:

作者:然后变成一只猫
8:更加现代化

9:为模块化以及“瘦身做准备”

10:我稍微酱油一下

11:模块化,zgc,“开始瘦身”

12:忘了

详细版

作者:Genesis

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

java8

  1. lambada表达式(Lambda Expressions)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

  2. 方法引用(Method references)。方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,可以使语言的构造更紧凑简洁,减少冗余代码。

  3. 默认方法(Default methods)。默认方法允许将新功能添加到库的接口中,并确保兼容实现老版本接口的旧有代码。

  4. 重复注解(Repeating Annotations)。重复注解提供了在同一声明或类型中多次应用相同注解类型的能力。

  5. 类型注解(Type Annotation)。在任何地方都能使用注解,而不是在声明的地方。

  6. 类型推断增强。

  7. 方法参数反射(Method Parameter Reflection)。

  8. Stream API 。新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。Stream API集成到了Collections API里。

  9. HashMap改进,在键值哈希冲突时能有更好表现。

  10. Date Time API。加强对日期和时间的处理。

  11. java.util 包下的改进,提供了几个实用的工具类。

    • 并行数组排序。
    • 标准的Base64编解码。
    • 支持无符号运算。

    java.util.concurrent 包下增加了新的类和方法。

    1. java.util.concurrent.ConcurrentHashMap 类添加了新的方法以支持新的StreamApi和lambada表达式。
    2. java.util.concurrent.atomic 包下新增了类以支持可伸缩可更新的变量。
    3. java.util.concurrent.ForkJoinPool类新增了方法以支持 common pool。新
    4. 增了java.util.concurrent.locks.StampedLock类,为控制读/写访问提供了一个基于性能的锁,且有三种模式可供选择。
  12. HotSpot 删除了 永久代(PermGen).方法调用的字节码指令支持默认方法。

java9

  1. java模块系统 (Java Platform Module System)。
  2. 新的版本号格式。 M A J O R . MAJOR. MAJOR.MINOR. S E C U R I T Y . SECURITY. SECURITY.PATCH
  3. java shell,交互式命令行控制台。
  4. 在private instance methods方法上可以使用@SafeVarargs注解。
  5. diamond语法与匿名内部类结合使用。
  6. 下划线_不能单独作为变量名使用。
  7. 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
  8. Javadoc
    1. 简化Doclet API。
    2. 支持生成HTML5格式。
    3. 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语。
    4. 支持新的模块系统。
  9. JVM
    1. 增强了Garbage-First(G1)并用它替代Parallel GC成为默认的垃圾收集器。
    2. 统一了JVM 日志,为所有组件引入了同一个日志系统。
    3. 删除了JDK 8中弃用的GC组合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
  10. properties文件支持UTF-8编码,之前只支持ISO-8859-1。
  11. 支持Unicode 8.0,在JDK8中是Unicode 6.2。

java10

  1. 局部变量类型推断(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 变量。
  1. 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实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值