写点什么

OpenJDK 更新了 InvokeDynamic

  • 2011-01-12
  • 本文字数:1001 字

    阅读完需:约 3 分钟

就在圣诞节之前,OpenJDK 构建开始包含更新版本的 JSR 292 API 了,虽然尚非最终版,但却是一个好的迹象,向我们展现了 JSR 的形成过程。有些人可能还不太熟悉 JSR 292,它添加了全新的字节码指令:invokedynamic,可以在缺少静态类型信息的情况下执行方法调用,InfoQ 对此曾做过报道

John Rose 的博客对主要的变化进行了总结,如下所示:

  1. CallSite 类变成抽象的了,分解为 3 个子类:MutableCallSite、ConstantCallSite 及 VolatileCallSite。
  2. java.dyn.Linkage 不建议使用,将会在最终的公开草案中被移除。
  3. 移除了 java.dyn.JavaMethodHandle 类。Rose 的博客上写到“使用 Lookup.findVirtual (cached in a private static final) 与 MethodHandle.bindTo 可以将任意对象转换为方法句柄。可以使用 MethodHandles.asInstance 将方法句柄转换为任意的 SAM 接口”。

某些 API 仍旧是临时性的,未来可能会发生变化,这包括 MethodHandles.AsInstanceObject 接口,它为应用提供了一种机制,可以使其在方法句柄与 SAM 对象间重复转换,整个过程不会有创建未绑定的委托链的风险。此外,目前有些 JVM 选项需要手工开启才能与 JSR 292 搭配使用(XX:+UnlockExperimentalVMOptions、-XX:+EnableInvokeDynamic 及 -XX:+EnableMethodHandles),在不远的将来这些选项将会默认开启。

令人失望的是 JDK 7 没有在 Java 语言中包含对 invokedynamic 指令的支持,它可能会在 JDK 8 的 Project Lambda 中重新引入(实现 Java lambda 的实际计划是使用 JSR 292 中所引入的几个特性,包括 Method Handles 与动态调用)。但同时,Rose 将几个小的类文件转换器放在了一起(叫做“ indify ”),可用于生成 invokedynamic 指令,还可以为 MethodHandle 和 MethodType 常量生成“ldc”指令。Rémi Forax 也认识到了这个问题,于是开发了一个名为 DynamicIndy 的类。如 Forax 所述,这个类使用 Java 字节码操作库 ASM 4.0(尚未发布)来生成能够调用 invokedynamic 的静态方法。接下来,该静态方法会被转换为可由 Java 调用的 MethodHandle。

虽然 JSR 292 主要关注于动态语言的需求,但很显然,Java 本身已经成为该 API 的候选用户了。从这个角度来看,人们建议修改 java.dyn 这个包名。Brian Goetz 和 Mark Reinhold 提议将其修改为 java.lang.mh(mh 代表 MethodHandle),同时还欢迎其他的建议,这些建议可以先放到 Rémi Forax 的博客上。

查看英文原文: InvokeDynamic Updates in OpenJDK

2011-01-12 23:401943
用户头像

发布了 88 篇内容, 共 272.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

高并发下如何防止商品超卖?

量贩潮汐·WholesaleTide

高并发

Web前端入门:JavaScript 循环结构注意事项

不在线第一只蜗牛

前端

使用 Run:ai Model Streamer 实现模型的高效加载

Se7en

中烟创新AI审核平台,打造烟草行业采购全链条合规管理新范式

中烟创新

ToDesk优惠码是什么,如何使用?

小喵子

优惠券 远程控制 ToDesk todesk、

NetTrace 工具介绍

天翼云开发者社区

网络

远控安全进阶之战:TeamViewer/ToDesk/向日葵设备安全策略对比

小喵子

安全 远程办公 远程控制 ToDesk

Java后台实现微信小程序不同人员生成不同小程序码并追踪扫码来源

电子尖叫食人鱼

Java 微信小程序

高德发布智能眼镜解决方案| 携手AR领军企业,引领智慧出行新未来

高德开放平台

AI AR loT 高德地图 AR眼镜

昆仑万维天工超级智能体APP上线后爆火!全球首款Office智能体APP,开启AI办公新时代

新消费日报

零风险操作!DolphinScheduler高可用架构下的无损扩缩容指南

白鲸开源

开源 运维 Apache DolphinScheduler 扩缩容 任务调度平台

人工智能AI在数字化转型有哪些应用?

优秀

人工智能 AI 数字化转型

小白也能轻松上手:ToDesk、Parsec、AnyDesk、TeamViewer 哪款远程软件最适合新手?

小喵子

远程

5月 | 塞讯模拟攻击库更新汇总

塞讯科技

网络安全

全球科技巨头云集,展现AI前沿成果|2025深圳人工智能展

AIOTE智博会

高交会 高新技术展 深圳高交会

超实用!Dify调用Java的3种实现方式!

王磊

百度网盘位列AI产品榜APP第一,AI激活网盘内容管理、消费新增量

极客天地

一种更简单的方式运行 C# 代码,简化 C# 开发体验!

不在线第一只蜗牛

C#

DNS攻击类型有哪些?如何应对DNS攻击威胁?

防火墙后吃泡面

前端热更新:无声引擎驱动中国互联网数字化转型

xuyinyin

Web3的成功离不开什么?

PowerVerse

去中心化 云算力 web3 #区块链

如何通过ETLCloud实现跨系统数据同步?

谷云科技RestCloud

MySQL 数据库 数据同步 ETL 数据集成

Vue3组件通信全攻略:多种方式详解+实战场景,轻松玩转复杂数据流!

量贩潮汐·WholesaleTide

JavaScript Vue 3

社区答疑明星招募令 | 成为SeaTunnel社群“技术担当”,我们等你来!

白鲸开源

开源社区 数据集成 Apache SeaTunnel 开源活动

上新功能!通义灵码行间建议预测 NES 使用方法

阿里云云效

阿里云 通义灵码

全维度测试通过!DolphinScheduler 3.2.0单节点部署与验证实录

白鲸开源

大数据 开源 性能测试 Apache DolphinScheduler 工作流任务调度

上新功能!通义灵码行间建议预测 NES 使用方法

阿里巴巴云原生

阿里云 通义灵码

A路径 VS B路径:先攻新加坡还是直取美国?中国科技出海的生死选择题

白鲸开源

开源 DataOps 出海 商业化 白鲸开源

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章