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 ...
随机推荐
- ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)
名词缩写 ASID:Address Space ID 地址空间标识符 CD:Context Descriptor: 上下文描述符: CTP:Context-table pointer 上下文表指针 E ...
- vue 组件中使用 scoped 有的样式不会生效 解决办法
造成原因:组件的嵌套导致 : 解决:
- Android复习(三)清单文件中的元素——>supports-gl-texture、supports-screens
<supports-gl-texture> 注意:Google Play 会根据应用支持的纹理压缩格式对其进行过滤,以确保应用只能安装在可正确处理其纹理的设备上.您可以将纹理压缩过滤用作定 ...
- 宏定义define的用法
#define read(x) scanf("%d",&x); 这行代码是一个宏定义,使用了 C 语言中的 #define 指令.它的作用是定义一个名为 read 的宏,用 ...
- 云原生爱好者周刊:GitHub 官方文档终于开源了!
云原生一周动态要闻: API 在 Kubernetes 1.22 中被删除 ContainIQ 公开发布 - Kubernetes 本地实时监控! Sophos 收购 Capsule8 开源项目推荐 ...
- Kubernetes 跨 StorageClass 迁移 Persistent Volumes 完全指南
大家好,我是米开朗基杨. KubeSphere 3.3.0 (不出意外的话~)本周就要 GA 了,作为一名 KubeSphere 脑残粉,我迫不及待地先安装 RC 版尝尝鲜,一顿操作猛如虎开启所有组件 ...
- 带你一起看看nginx如何部署安装
nginx部署安装 Linux安装 源码构建Nginx 管理器安装 windows安装 首先需要下载Nginx软件包 nginx软件官方下载地址: nginx官方下载连接 建议选择稳定的软件版本,如果 ...
- 一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB
MySQL 中的存储引擎是其数据库管理系统的核心模块,用于处理不同类型的数据存储和检索操作.每种存储引擎都有自己的特点,适用于不同类型的应用场景.MySQL 最常用的存储引擎包括 InnoDB.MyI ...
- Power BI使用技巧
一.筛选器相关 1.筛选器的可选择范围不正确 在Power BI中,维度表和事实表之间的数据建模非常重要,我们在进行关系的建立的时候,PBI Desktop会根据我们的数据情况自动选择两个表之间的基数 ...
- luogu P3842 [TJOI2007] 线段
link 好题,考虑如何设定状态. 设\(dp_{i,0/1}\)表示到了第\(i\)行走完后停在这一行的最左侧/最右侧. 设定\(l_i\)表示这一行该线段的最左侧,\(r_i\)表示这一行的最右侧 ...