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 ...
随机推荐
- Java项目笔记(一)
一.springboot控制台打印sql日志 ---------.mapper为你启动类扫描的mapper路径 logging.level.---------.mapper = debug 二.前端传 ...
- LeetCode 218. 天际线问题 (扫描线+优先队列)
扫描线+优先队列 https://leetcode-cn.com/problems/the-skyline-problem/solution/tian-ji-xian-wen-ti-by-leetco ...
- 逆向 Virustotal 搜索接口 X-VT-Anti-Abuse-Header
逆向 Virustotal 搜索接口 X-VT-Anti-Abuse-Header 搜索示例 搜索 123,网页地址为:https://www.virustotal.com/gui/search/12 ...
- aarch64 和 ARMV8 的区别
aarch64 和 ARMv8 是紧密相关但涵义不同的术语,在解释他们的区别之前,让我们先简单理解它们各自的含义: ARMv8: ARMv8 是指 ARM 架构的第八个版本,这是由 ARM Holdi ...
- iOS中在导航条设置搜索框使用小结
最近在项目开发中用到了搜索框,一般是设置在列表顶部或者导航条上.下面说一下在导航条上使用搜索框的思路,刚开始是直接将CCSearchBar添加到导航条,在viewWillDisappear设置隐藏,在 ...
- iOS通知使用小结
最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...
- nestjs 登录和验证码结合验证 svgCaptcha 包 session 会话标识
// ps: 现在用户验证使用 token jwt 了 代替了 session // session 是服务器为每个用户建立的唯一标识 以区分用户 会话标识 // session 是express中的 ...
- C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点
#include <iostream> // 定义一个宏函数 #define ADD(x,y) x+y; // 宏函数具有速度快等特点 但是写代码有些业务比较繁琐,所以C++中使用了内联函 ...
- 3.flask 源码解析:路由
目录 一.flask 源码解析:路由 1.1 构建路由规则 1.2 werkzeug 路由逻辑 1.3 flask 路由实现 1.4 match 实现 Flask 源码分析完整教程目录:https:/ ...
- 云原生周刊: 使用 Kubectl 执行 100 个 Kubernetes 诊断命令 | 2023.10.23
开源项目推荐 Stern Stern 是一个针对 Kubernetes 的多 pod 和容器日志跟踪工具.可以跟踪 Kubernetes 上的多个 pod 和 pod 中的多个容器.每个结果都用颜色编 ...