写点什么

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

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

关注

评论

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

坚持写作靠什么?

石君

输入 输出 28天写作

日语复习 Day02【~あっての】

IT蜗壳-Tango

程序员 七日更 日语语法

28天瞎写的第二百一九天:包辆三轮车上班的日子

树上

28天写作

生产环境全链路压测建设历程 29:FAQ 之 评估方法论、改造、痛点

数列科技杨德华

28天写作

智能building之 园区

张老蔫

28天写作

聚焦目标,团队工作不再一盘散沙(下)

一笑

管理 目标管理 复盘 28天写作

【Mysql-InnoDB 系列】事务提交过程

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

早上听了一场关于财富的线上专题分享

熊斌

财富自由 28天写作

如何通过即构小程序组件实现直播带货功能?

ZEGO即构

小程序 直播带货

精选算法面试-数组III

李孟聊AI

面试 算法 数组 28天写作

从硅谷到小米,崔宝秋的25年开源人生

李忠良

28天写作

想象力,科幻与其他「关于科幻 8/28」

道伟

28天写作

像用户一样测试:别掉链子

QualityFocus

软件测试 用户体验 回归测试

Soul 网关实践 02|选择器&规则介绍

哼干嘛

Java 探索与实践 Soul网关

【CSS】文字特效(text-shadow)

德育处主任

CSS css3 html/css CSS小技巧 28天写作

JavaScript05 - JavaScript数据类型

Mr.Cactus

JavaScript

创业失败启示录|校园微生活之留学生面对面

阿萌

28天写作 创业失败启示录 青城

读书笔记:《激荡三十年》下

lidaobing

28天写作 激荡三十年

五种IO模型

懒AI患者

io nio AIo bio IO多路复用

重学JS | 箭头函数为什么不能用做构造函数?

梁龙先森

面试 大前端 编程语言 28天写作

区块链介绍

v16629866266

区块链

项目管理系列(3)-如何开好一个项目启动会

Ian哥

项目管理 28天写作

Java 程序经验小结:接口只用于定义类型

后台技术汇

28天写作

【计算机内功修炼】六:10张图让你彻底理解回调函数

码农的荒岛求生

异步 同步 异步IO 回调函数 异步编程

CMS系统——登录功能

程序员的时光

程序员 七日更 28天写作

正则表达式匹配ini文件的section

老王同学

胆大无险,脚踏实地

.

28天写作

低代码是在炒概念,炒得不错

Justin

低代码 28天写作

Soul 网关实践 03|http 请求接入网关

哼干嘛

Java 探索与实践 Soul网关

短视频+直播=最自然的表达方式?| 视频号 28 天 (09)

赵新龙

28天写作

[6/28]产品业务数据分析的质量实践

L3C老司机

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章