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 ...
随机推荐
- IDEA更改远程git仓库地址
前言 我们在使用IDEA开发时,一般会配置好对应的git仓库,这样就比较容易对代码进行控制以及协同开发. 但有时候,我们远程的仓库地址由于这样那样的原因,需要迁移(这在爱折腾的企业是常有的事情). ...
- 《Vue.js 设计与实现》读书笔记(1-3章)
第 1 章.权衡的艺术 命令式 or 声明式 命令式:关注过程 声明式:关注结果 声明式直接声明想要的结果,框架帮用户封装好命令式的代码,所以在封装的过程中要做一些其他的事情来(生成要做的事情/找出差 ...
- Microsoft 发布 .NET 9 RC 2
距离最终版本还有一个月的时间,Microsoft 已经交付了 .NET 9 的第二个也是最后一个候选版本..NET 团队在公告帖子中写道[1],"当我们为 11 月的 .NET 9 正式发布 ...
- axios 常见状态码
'100': 'Continue', '101': 'SwitchingProtocols', '102': 'Processing', '103': 'EarlyHints', '200': 'Ok ...
- IOC注入分类 依赖注入
依赖注入 也就是服务的注入 可以理解 一些服务的容器,目的:把一些全局需要使用的资源,服务放到某个接口中,使其可以在全局中使用 和前端的状态管理工具实现的功能差不多 注册服务的三种形式 单例模式Ad ...
- Android复习(四)权限—>定义自定义应用权限
定义自定义应用权限 本文档介绍了应用开发者如何使用 Android 提供的安全功能来定义自己的权限.通过定义自定义权限,应用可以与其他应用共享其资源和功能.如需详细了解权限,请参阅权限概览. 背景 A ...
- 四、Spring Boot集成Spring Security之认证流程
二.概要说明 本文主要介绍登录登出业务流程,所以使用基于内存的用户名密码,暂不介绍授权相关内容,后续会详细介绍基于数据库的认证及授权 如何查看基于内存的默认用户名密码 如何配置基于内存的自定义用户名密 ...
- 二、java之面向对象
面向对象 面向对象编程(Object-Oriented Programming,OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据 三大特性: ◆封装 ◆◆封装的概念 程序 ...
- 适用于 .NET 稳定的官方OpenAI库
前言 今天给大家分享一个由 OpenAI 官方提供,旨在为 .NET 开发者提供方便的接口来访问 OpenAI 的 REST API.这个项目通过 NuGet 包的形式发布,使得 .NET 应用程序能 ...
- 【磐维数据库】Oracle(透明网关)访问磐维数据库(PanWeiDB)
磐维数据库(PanWeiDB)是由中国移动基于中国本土开源数据库openGauss打造的自研数据库产品,主要面向ICT基础设施.它具有高性能.高可靠性.高安全性和高兼容性的特点,能够支持集中式.分布式 ...