面试官问我Java9~14的有哪些重要的新特性,我哭了~~~( 四 )

  • ZGC 堆由一组称为 ZPages 的堆区域组成 。 在 GC 周期中清空 ZPages 区域时 , 它们将被释放并返回到页面缓存 ZPageCache 中 , 此缓存中的 ZPages 按最近最少使用(LRU)的顺序 , 并按照大小进行组织
  • 在 Java 13 中 , ZGC 将向操作系统返回被标识为长时间未使用的页面 , 这样它们将可以被其他进程重用
  • SocketAPI 重构
    • Java 13 为 Socket API 带来了新的底层实现方法 , 并且在 Java 13 中是默认使用新的 Socket 实现 , 使其易于发现并在排除问题同时增加可维护性
    动态应用程序类-数据共享
    • Java 13 中对 Java 10 中引入的 应用程序类数据共享进行了进一步的简化、改进和扩展 , 即:允许在 Java 应用程序执行结束时动态进行类归档 , 具体能够被归档的类包括:所有已被加载 , 但不属于默认基层 CDS 的应用程序类和引用类库中的类
    Java14record 关键字
    • 简化数据类的定义方式 , 使用 record 代替 class 定义的类 , 只需要声明属性 , 就可以在获得属性的访问方法 , 以及 toString , hashCode,equals 方法
    • 类似于使用 Class 定义类 , 同时使用了 lomobok 插件 , 并打上了@Getter,@ToString,@EqualsAndHashCode注解
    • 作为预览特性引入 /** * 这个类具有两个特征 * 1. 所有成员属性都是final * 2. 全部方法由构造方法 , 和两个成员属性访问器组成(共三个) * 那么这种类就很适合使用record来声明 */ final class Rectangle implements Shape { final double length; final double width; public Rectangle(double length, double width) { this.length = length; this.width = width; } double length() { return length; } double width() { return width; } } /** * 1. 使用record声明的类会自动拥有上面类中的三个方法 * 2. 在这基础上还附赠了equals() , hashCode()方法以及toString()方法 * 3. toString方法中包括所有成员属性的字符串表示形式及其名称 */ record Rectangle(float length, float width) { }
    空指针异常精准提示
    • 通过 JVM 参数中添加-XX:+ShowCodeDetailsInExceptionMessages , 可以在空指针异常中获取更为详细的调用信息 , 更快的定位和解决问题 a.b.c.i = 99; // 假设这段代码会发生空指针 Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. at Prog.main(Prog.java:5) // 增加参数后提示的异常中很明确的告知了哪里为空导致
    switch 的增强终于转正
    • JDK12 引入的 switch(预览特性)在 JDK14 变为正式版本 , 不需要增加参数来启用 , 直接在 JDK14 中就能使用
    • 主要是用->来替代以前的:+break;另外就是提供了 yield 来在 block 中返回值
    Before Java 14
    switch (day) {case MONDAY:case FRIDAY:case SUNDAY:System.out.println(6);break;case TUESDAY:System.out.println(7);break;case THURSDAY:case SATURDAY:System.out.println(8);break;case WEDNESDAY:System.out.println(9);break;}Java 14 enhancements
    switch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY-> System.out.println(7);case THURSDAY, SATURDAY-> System.out.println(8);case WEDNESDAY-> System.out.println(9);}instanceof 增强
    • instanceof 主要在类型强转前探测对象的具体类型 , 然后执行具体的强转
    • 新版的 instanceof 可以在判断的是否属于具体的类型同时完成转换
    Object obj = "我是字符串";if(obj instanceof String str){System.out.println(str);}其他特性
    • 从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法 , 从支持 Linux 平台到 Java14 开始支持 MacOS 和 Window(个人感觉是终于可以在日常开发工具中先体验下 ZGC 的效果了 , 虽然其实 G1 也够用)
    • 移除了 CMS 垃圾收集器(功成而退)
    • 新增了 jpackage 工具 , 标配将应用打成 jar 包外 , 还支持不同平台的特性包 , 比如 linux 下的deb和rpm , window 平台下的msi和exe
    总结关于预览特性