2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:401941
用户头像

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

关注

评论

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

原生 App 的开发费用

北京木奇移动技术有限公司

APP开发 软件外包公司 APP外包

DeepSeek-V3.2的DSA稀疏注意力技术:在TPU平台上的效能革命与适配实践

中昊芯英

人工智能 tensorflow TPU 大语言模型 DSA

不止节能,更能 “生钱”:MyEMS 辅助企业参与电力现货市场的实操案例

开源能源管理系统

开源 能源管理系统

拼叨叨砍价系统:实体店低成本引流的营销利器

微擎应用市场

一佳教育培训课程系统小程序:一站式教育数字化解决方案

微擎应用市场

思科SRv6 实现 VPN+流量工程测试

天翼云开发者社区

网络

提升AD管理效率:权限委派的两次进化

运维有小邓

AD域管理

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI代理框架需求洞察

qife122

开源项目 AI开发

一种智能调度分布式路径计算解决方案

天翼云开发者社区

CDN 安全加速

电商小程序开发,打通物流端的终极大招之API接口

快递鸟

添加DNS解析记录需要注意哪些事项?(国科云)

防火墙后吃泡面

Playwright MCP入门指南:从零开始构建自动化测试

测吧(北京)科技有限公司

如何像顶尖产品主理人一样思考?掌握这五个黄金维度

星云低代码中间件

软件 业务系统 企业系统

婚纱摄影小程序管理系统:助力摄影商家数字化运营新方案

微擎应用市场

医院更衣室外来物种:全新自动发衣系统,比你效率高

斯科信息

斯科信息 RFID自动发衣系统 RFID智能发衣机

如何设计一个高性能、不可篡改的选票系统——以美国总统选举为例

测试人

企业如何选择私有化部署的即时通讯(IM)系统?

BeeWorks

即时通讯 IM 私有化部署

当能耗监控变 “游戏”:MyEMS 可视化看板如何让员工主动参与节能?

开源能源管理系统

开源 能源管理系统

事件驱动重塑 AI 数据链路:阿里云 EventBridge 发布 AI ETL 新范式

阿里巴巴云原生

阿里云 云原生 EventBridge

【隐语SecretFLow隐私计算】纵向联邦算法 SecureBoost Benchmark——SGB性能测试报告

隐语SecretFlow

算法 联邦学习 隐私计算 可信隐私计算评测

等保合规日志 “暗礁” 识别:5个常见错误+规避方法

运维有小邓

日志管理 日志审计 等保20 Syslog日志管理

SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施

阿里巴巴云原生

阿里云 云原生 sls

流量突然提升100倍QPS,怎么办?

测试人

2025 年 9 月《大模型 SQL 能力排行榜》发布

爱可生开源社区

sql LLM

当游戏NPC有了“灵魂”,网易伏羲解码游戏智能交互场景新实践

网易伏羲

网易伏羲 游戏AI 逆水寒手游 新倩女幽魂

函数计算 × MSE Nacos : 轻松托管你的 MCP Server

阿里巴巴云原生

阿里云 云原生 函数计算 MSE

如何通过内核版本检查判断FreeBSD是否需要重启

qife122

freebsd 内核更新

喜报!网易灵动荣获2025全球数贸创新大赛机器人赛道金奖

网易伏羲

智慧矿山 网易伏羲 工程机械 网易灵动

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章