写点什么

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

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

关注

评论

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

市场易入选「2023产业互联网示范平台」

Geek_2d6073

PPT软件Gamma平替!这款AI生成PPT工具千万别错过!

彭宏豪95

PPT 在线白板 PPT模板 办公软件 AI生成PPT

这届黑客马拉松,和效率“杠上了” | StartDT Hackathon

奇点云

黑客马拉松 数据技术 奇点云

当「软件研发」遇上 AI 大模型

阿里云云效

阿里云 AI 云原生 通义灵码

从原始边列表到邻接矩阵Python实现图数据处理的完整指南

EquatorCoco

数据库 图数据分析

开发自己的游戏直播平台:需要一系列必要的条件和资料

软件开发-梦幻运营部

JAVA下唯一一款搞定OLTP+OLAP的强类型查询这就是最好用的ORM相见恨晚

EquatorCoco

Java 开发语言

IT外包的可扩展性及其如何推动业务增长

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业 IT外包服务商

东南亚淘宝代购系统,东南亚国代购网站建设

tbapi

淘宝代购系统

深入理解Python多进程:从基础到实战

快乐非自愿限量之名

Java Python 网络

IPQ5322 VS IPQ9574 What's the difference?

wallyslilly

ipq9574 ipq5322

免费送大家电子书了:全网独创

执于业务

您可知道如何通过`HTTP2`实现TCP的内网穿透???

不在线第一只蜗牛

网络协议 网络 HTTP

Acrobat Pro DC 2023 for mac激活版:强大的PDF编辑器

iMac小白

Acrobat Pro DC 2023下载 Acrobat Pro DC 2023 激活

数据仓库 vs 数据湖 vs 湖仓一体:如何基于自身数据策略,选择最合适的数据管理方案?

tapdata

什么是数据仓库 什么是数据湖 湖仓一体是什么 数据仓库和数据湖的区别是

科普:基于FMU模型的TSN交换机仿真

DevOps和数字孪生

FMU模型 TSN

架构实战营 - 模块六作业

满心

Rust vs Go:如何选择最适合你的编程语言

伤感汤姆布利柏

【JAVA】全链路灰度发布的实践分享

智在碧得

微服务架构 灰度发布 全链路 java 编程 全链路灰度

中国少年,从一场软件竞技赛驶向产业之海

脑极体

软件

IT外包:打通企业和IT技术人才之间的障碍

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业 IT外包服务商

ON1 NoNoise AI 2024 for Mac激活版:强大的图像降噪软件

iMac小白

ON1 NoNoise AI下载 ON1 NoNoise AI破解

视觉语言模型详解

不在线第一只蜗牛

自然语言 语言模型

当「软件研发」遇上 AI 大模型

阿里巴巴云原生

阿里云 云原生 通义灵码

保姆级指南,从0到1打造你的个人开源项目

快乐非自愿限量之名

开源 项目开发

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章