JDK 18 最新动态和 JDK 19 新特性预测
JDK 18 最新动态和 JDK 19 新特性预测_语言 & 开发_Michael Redlich_InfoQ精选文章
里面提到文章 定界延续(delimited continuations)和尾调用, Why Continuations are Coming to Java
这篇文章非常棒,已经和我之前的想法非常接近了,贴几段 google 翻译的:
此类实现一次性多提示有限延续,但我们可以决定添加克隆它们的能力。如果我们克隆一个延续,我们可以捕获它的特定时间,然后我们运行它,我们会得到一些称为重入或多镜头延续的东西。这就是在这些一次性延续之上实现它们的简单程度,我们只需在每次运行时克隆延续并返回一个新副本。你可以用它来做一些疯狂的事情,你可以编写真正回到过去的程序,大多数人不需要,我不确定我们是否真的要实现它,但我们可以。
我们可以做的另一件更有趣的事情是,我们可以使这些延续可序列化,这意味着您可以编写一段计算块。假设您正在从数据库中读取某些内容,并且正在等待响应,而在等待期间,您实际上不仅会被 CPU 暂停,而且会完全脱离机器,当您返回并获取来自数据库的结果,您可以一起在不同的机器上,也许更接近数据所在的位置,这将使访问数据的速度更快。
在我们与架构师进行了这次对话后不久,我阅读了 Nathaniel J. Smith 的一篇非常有趣的博客文章,内容涉及一种叫做结构并发的东西。他将这个想法归功于 Martin Sústrik,这是您阅读博客文章并说“这绝对正确。这就是做事的方式”的罕见场合之一。
结构并发的主要思想是什么?这里的核心技巧是,不是以一种类似即发即弃的方式创建线程,而是创建一个线程并且该线程运行只要它想要并且你无法控制它。线程被限制在一个众所周知的生命周期中,该生命周期延伸到给定的代码块,我将向您展示一个示例。在目前的原型中因为没有更好的名字,我们只称它为光纤范围,名字可能会改变。我们有这个块定义了一个光纤范围,所有在范围内创建的光纤都保证在我们退出范围时终止。
这是如何运作的?当我们尝试在 Java 中退出该作用域时,有一个资源树会自动调用 Fiber 作用域上的 close 方法,并且会阻塞,直到在该块内创建的所有 Fiber 都终止。这给了我们一些很好的优势,例如,当您创建一个线程并且您忘记了它时,该线程可能会抛出异常并且没有人会处理。这样,因为您知道线程将在那里诞生并在块结束之前死亡,所以您可以捕获它的异常并处理它。您可以创建大量纤程,甚至可以嵌套这些范围以创建纤程树,并且只需取消范围即可取消所有纤程。
你可以用它做一些好事情,你可以编写一个方法来完成重新任务并希望并行启动球,但这就像一场比赛,你只想等待它第一次完成。Fiber 作用域为我们提供了终止队列,并且对于每个任务,我们都会产生一个新的 Fiber。这本质上是免费的,就像在 Java 中创建对象,然后我们将它们签名到终止队列,然后我们根据这个提示进行阻塞,我们首先获取第一个终止的光纤的结果,因为我们无法离开范围直到所有其他的都终止,一旦我们在 finally 块中有结果,我们取消所有剩余的纤维,然后我们可以离开范围。
我们可以做同样的事情,只需稍微改变一下。与其说光纤范围是可取消的,我们可以给它一个截止日期,并说我们只愿意等待任何线程的截止日期。如果其中一个线程在该截止日期前完成,那么我们很好。如果没有,那么光纤范围将自动取消所有这些。这使我们能够以一种非常好的方式编写有趣的东西。
当然,说归说,其实在 JVM 上做这些并不容易,比如说“延续的序列化”
参与者 5:你提到你有随用随用的内存占用。这是否意味着您必须加载已执行的堆栈才能继续执行,因为您无法继续调用转发?这是如何运作的?
Pressler:我会说话,你可以在我现在谈论实施时观看其他谈话。延续堆栈存储在两个 Java 数组中的 Java 堆中,我们确实来回复制它们,问题是如何快速完成。现在,我们有一个解决方案,允许我们只复制一帧,其余的则懒惰地复制。我们可以稍后讨论这个,或者你可以观看我们讨论实施的其他讨论。
很棒!期待早日推出!
JDK 18 最新动态和 JDK 19 新特性预测的更多相关文章
- Java JDK 1.5 1.6 1.7 新特性整理
Java JDK 1.5的新特性 1.泛型 List<String> strs = new ArrayList<String>();//给集合指定存入类型,上面这个集合在存入数 ...
- 说出 JDK 1.7 中的三个新特性?
虽然 JDK 1.7 不像 JDK 5 和 8 一样的大版本,但是,还是有很多新的特性, 如 try-with-resource 语句,这样你在使用流或者资源的时候,就不需要手动关 闭,Java 会自 ...
- 你需要了解的 C++ 17 Top 19 新特性(附精彩评论)
什么是 C++17? C++17(或 C++1z)是继 C++14 之后 C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称.C++17 现在功能已齐全,正在成为国际标准的路上.它的规范已 ...
- JDK 7中的文件操作的新特性
文件系统综述 一个文件系统在某种媒介(通常是一个或多个硬盘)上存储和组织文件.如今的大多数文件系统都是以树状结构来存储文件.在树的顶端是一个或多个根节点,在根节点一下,是文件和目录(在Windows系 ...
- JDK 5 ~ 11 新特性倾情整理
为了大家对JDK有一个全面的了解,下面我为大家整理了JDK5~11的所有关键新特性! 先看一下JDK的版本迭代图: 注: OpenJDK和JDK区别 GPL协议通用性公开许可证(General ...
- Java 13 即将发布,新特性必须抢先看!
作者:h4cd 本文转载自开源中国(ID:oschina2013) 由于 Java 现在采取"半年发布一次新版本"的模式,所以 Java 12 的下一个版本 Java 13/JDK ...
- Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码
美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Java 8 扩 ...
- 个人认为目前比较好用的ECMAScript(16-20)新特性
ECMAScript(16.17.18.19)新特性 Array.prototype.includes includes 是数组上的简单实例方法,可以轻松查找到数组中是否包含指定内容(包括NaN) 返 ...
- 海豚调度直播来了 - 即将发版的1.3.0新特性及Roadmap路线
在过去的3个多月,Apache DolphinScheduler(incuating)和DolphinScheduler社区发生了很多变化,今晚19:30在线直播将为大家介绍最新1.3.0的新特性及R ...
- Maclean Liu对Oracle Database 12c新特性研究汇总
Maclean Liu关于DB 12c新特性的研究文章如下: [Oracle Database 12c新特性] In-Database Archiving数据库内归档 [Oracle Database ...
随机推荐
- Ant Design Vue 在表格中插入图片
这两天一直在用 Antdv 做一些小 demo,今天在做表格的时候想在表格中插入图片,简单翻了下文档和国内的博客,发现所有的方法竟然都不好使,最后还是在官网的示例代码中看到相关的部分,不得不说这种 u ...
- Laravel视图共享数据
Laravel视图共享数据 最近在用lavavel过程中想实现公共头部尾部需要的配置数据在所有的页面中都可以使用,便查看了官方文档,在此做一个总结: 一. 修改 ComposerServiceProv ...
- ftrace的trace_options
ftrace 中的 trace_options 选项用于控制追踪数据的收集和显示方式.你可以通过 /sys/kernel/debug/tracing/trace_options 文件来设置这些选项.每 ...
- Linux PSI--Pressure Stall Information
Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi. 转载自使用PSI(Pressure Stall Information)监控服务器资源_ ...
- CE-植物大战僵尸杂交版
植物大战僵尸杂交版 偏移:208+82c
- Vnode 是什么 ,什么是虚拟DOM ?
Vnode 是 JavaScript 对象,就是把标签结构的信息描述成js对象 : Vnode 的作用:通过 render 函数 将 template 描述成 Vnode ,然后通过一系列操作转换真实 ...
- 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)
大家好,我是老 Z! 上篇文章实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化界面这种形式.本文将会介绍如何使用 GitOps 来部署 M ...
- 在 KubeSphere 中部署高可用 Redis 集群
作者:余生大大,大数据开发工程师,云原生爱好者,KubeSphere 社区用户. 前言 Redis 是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署. 常规部 ...
- Linux_进程理解、状态与优先级(详细版)
1.进程的概念 课本概念:程序的一个执行实例,正在执行的程序等. 内核观点:担当分配系统资源(CPU时间,内存)的实体. 其实:进程=内核的相关管理数据结构(task_struct.页表等)+程序的代 ...
- NIO和传统IO
传统 IO 基于字节流或字符流(如 FileInputStream.BufferedReader 等)进行文件读写,以及使用 Socket 和 ServerSocket 进行网络传输. NIO 使用通 ...