侧边栏壁纸
博主头像
ZHD的小窝博主等级

行动起来,活在当下

  • 累计撰写 79 篇文章
  • 累计创建 53 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

JDK 12 的新特性(简版)

江南的风
2019-11-15 / 0 评论 / 0 点赞 / 22 阅读 / 3676 字 / 正在检测是否收录...

Java 12 的新特性

1.增强的Switch表达式

JDK 12扩展了switch语句的语法,使其不仅可以用作语句,还可以用作表达式。这意味着switch现在可以直接返回值或赋值给变量,从而简化了代码并减少了编写额外代码的需要。这一特性在后续的JDK版本中得到了进一步的加强和稳定。

public class SwitchExpressionsDemo {  
  
    public static void main(String[] args) {  
        // 示例数据  
        String dayOfWeek = "MONDAY";  
  
        // 使用Switch Expressions来处理dayOfWeek  
        String result = switch (dayOfWeek) {  
            case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";  
            case "SATURDAY", "SUNDAY" -> "Weekend";  
            default -> "Invalid day";  
        };  
  
        // 输出结果  
        System.out.println(result);  
  
        // 另一个示例,演示带有多个语句的case  
        int number = 3;  
        String numberDescription = switch (number) {  
            case 1 -> "One";  
            case 2 -> "Two";  
            case 3, 4, 5 -> {  
                String description = "Number is between 3 and 5";  
                System.out.println("Evaluating case for numbers 3, 4, 5...");  
                yield description; // 使用yield来返回结果  
            }  
            default -> "Number is greater than 5";  
        };  
  
        // 输出number的描述  
        System.out.println(numberDescription);  
    }  
}

2. 文件对比 Files.mismatch

Java 12 这次带来了文件对比功能。对比两个文件,如果内容一致,会返回 -1 ,如果内容不同,会返回不同的字节开始位置。

例子:

// 创建两个文件
Path pathA = Files.createFile(Paths.get("a.txt"));
Path pathB = Files.createFile(Paths.get("b.txt"));

// 写入相同内容
Files.write(pathA,"abc".getBytes(), StandardOpenOption.WRITE);
Files.write(pathB,"abc".getBytes(), StandardOpenOption.WRITE);
long mismatch = Files.mismatch(pathA, pathB);
System.out.println(mismatch);

3. JVM相关

  • Shenandoah 垃圾收集器:Java 12 增加了 Shenandoah 一个低停顿的垃圾收集器,Shenandoah是一个旨在减少垃圾收集(GC)暂停时间的实验性GC算法。它通过与正在运行的Java线程同时工作,来减少GC对应用性能的影响。Shenandoah的暂停时间与堆的大小无关,这意味着无论堆是200MB还是200GB,其暂停时间都将保持一致。

  • JVM常量API:JDK 12引入了JVM常量API,该API提供了一组基于值的符号引用类型,用于描述可以从常量池加载的常量。这些改进有助于开发者更好地理解和操作Java类文件中的常量池。

  • ZGC 并发类卸载:Z 垃圾收集器现在支持类卸载,通过卸载不使用的类来释放这些类相关的数据结构,从而减少应用程序的总体占用空间。因为是并发执行,所以不会停止 Java 应用程序线程的执行,也因此对 GC 的暂停时间影响微乎其微。默认情况下启用此功能,但可以使用命令行选项禁用 -XX:-ClassUnloading。

  • G1 GC的改进:JDK 12增强了G1垃圾收集器,使其能够在混合收集过程中如果可能超过暂停目标时间时暂停收集。这有助于避免长时间的GC暂停,提高应用的响应性。JDK 12还增强了G1 GC,以便在空闲时自动将Java堆内存返回给操作系统。这有助于减少云服务等场景下的资源占用和费用支出。

0

评论区