做网站用什么,网页顶部导航栏,庆阳网站网站建设,别人给我们做的网站如何关闭文章目录 JAVA19概述1. 记录模式(预览版本)2.Linux/RISC-V 移植3.外部函数和内存 API #xff08;预览版#xff09;4.虚拟线程(预览版)5.Vector API #xff08;第四次孵化#xff09;6.Switch 模式匹配#xff08;第三预览版#xff09;7.结构化并发#xff08;孵化阶… 文章目录 JAVA19概述1. 记录模式(预览版本)2.Linux/RISC-V 移植3.外部函数和内存 API 预览版4.虚拟线程(预览版)5.Vector API 第四次孵化6.Switch 模式匹配第三预览版7.结构化并发孵化阶段 JAVA19概述
JDK 19 2022 年 9 月 20 日正式发布以供生产使用非长期支持版本。不过JDK 19 中有一些比较重要的新特性值得关注。 JDK 19 只有 7 个新特性
JEP 405: Record Patterns记录模式[1] 预览JEP 422: Linux/RISC-V Port[2]JEP 424: Foreign Function Memory API外部函数和内存 API[3] 预览JEP 425: Virtual Threads虚拟线程[4] 预览JEP 426: Vector向量API[5] 第四次孵化JEP 427: Pattern Matching for switchswitch 模式匹配[6]JEP 428: Structured Concurrency结构化并发[7] 孵化
1. 记录模式(预览版本)
使用记录模式增强 Java 编程语言以解构记录值可以嵌套记录模式和类型模式实现强大的、声明性的和可组合的数据导航和处理形式。
2.Linux/RISC-V 移植
将 JDK 移植到 Linux/RISC-V目前仅支持 RISC-V 的 RV64GV 配置包含向量指令的通用 64 位 ISA。将来可能会考虑支持其他 RISC-V 配置例如通用 32 位配置 (RV32G)。
3.外部函数和内存 API 预览版
引入一个 APIJava 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过该 API 可有效地调用外部函数 JVM 之外的代码和安全地访问外部内存不受 JVM 管理的内存使得 Java 程序能够调用本机库并处理本机数据而不会出现 JNI 的脆弱性和危险。
4.虚拟线程(预览版) JVM线程跟操作系统线程是一一对应的关系线程真正的执行需要等到OS分配资源进行调度。因此操作系统对线程数量的限制也影响JVM线程数量。Centos7 修改操作系统线程数量大小方法.
# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
* hard nproc 65535虚拟线程 针对上述JVM线程限制的问题JDK19提供虚拟线程的方式可以在一定程度上突破线程数量大小的限制(借鉴了golang goroutine的设计思想)。在JDK19中线程分为平台线程(Platform Thread)、虚拟线程(Virtual Thread).
如上图所示虚拟线程完全归JVM管理不受操作系统限制因此JVM可以生成大量的虚拟线程执行业务逻辑从而提供系统的吞吐量。但是、但是、但是重要的事情说三遍,该特性目前并不成熟不建议在生产环境中使用。
案例代码 public static void main(String[] args) throws Exception {for (int i 0; i 100; i) {// 启动虚拟线程Thread.startVirtualThread(()-{System.out.println(Thread.currentThread() );});}Thread.sleep(10000);System.out.println(Hello ...);}相关API说明
Thread.ofVirtual() 创建虚拟线程Thread.ofPlatform() 创建平台线程Thread.startVirtualThread(Runnable) 创建并运行虚拟线程Executors.newVirtualThreadPerTaskExecutor() 线程池
测试代码
public class Test03 {public static void main(String[] args) throws Exception {//ExecutorService executorService Executors.newFixedThreadPool(1);ExecutorService executorService Executors.newVirtualThreadPerTaskExecutor();executorService.execute(new MyTask());executorService.execute(new MyTask());executorService.execute(new MyTask());executorService.execute(new MyTask());executorService.execute(new MyTask());Thread.sleep(2000);}static class MyTask implements Runnable{Overridepublic void run() {System.out.println(Thread.currentThread());try {Thread.sleep(1000);}catch (Exception e){e.printStackTrace();}System.out.println(LocalDateTime.now());}}}
修改JVM参数
-Djdk.virtualThreadScheduler.parallelism1 -Djdk.virtualThreadScheduler.maxPoolSize1设置ForkJoinPool的核心线程数和最大线程数
-Djdk.virtualThreadScheduler.parallelism1-Djdk.virtualThreadScheduler.maxPoolSize1
5.Vector API 第四次孵化
引入一个 API 来表达在运行时能够可靠编译的向量计算在支持的 CPU 架构上优化向量指令从而实现优于标量计算的性能。
6.Switch 模式匹配第三预览版
用 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 中允许针对一些模式测试表达式这样就可以简明而安全地表达复杂的面向数据的查询。
该特性最早在 Java 17 中作为预览版出现 Java 19 为第三次预览。
7.结构化并发孵化阶段
引入用于结构化并发的 API 来简化多线程编程结构化并发将不同线程中运行的多个任务视为单个工作单元从而简化错误处理、提高可靠性并增强可观察性。