写点什么

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

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

关注

评论

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

SpringCloud-02 Eureka学习笔记

游坦之

10月月更

4:数据操作-MySQL

Yeats_Liao

数据库 后端 10月月更

非父子组件之间的通信方式与mitt库🔥

渔戈

前端 Vue3 10月月更

OKR之剑·理念篇04:让OKR轻松上阵

vivo互联网技术

团队管理 OKR

数据湖(十一):Iceberg表数据组织与查询

Lansonli

数据湖 10月月更

【c++图论例题学习】【口袋的天空】【部落划分】

贤鱼很忙

c++ 图论 10月月更

手写一个Redux,深入理解其原理-面试进阶

beifeng1996

React

力扣刷题训练

lovevivi

c 数据结构 10月月更

令人头秃的js隐式转换面试题,你能做对吗

loveX001

JavaScript

8:单表查询-MySQL

Yeats_Liao

数据库 后端 10月月更

动态组件、异步组件以及生命周期和v-model🔥

渔戈

前端 Vue3 10月月更

C语言内存对齐问题

乌龟哥哥

C'语言 10月月更

【web 开发基础】PHP 的流程控制之双向条件分支结构 -PHP 快速入门 (13)

迷彩

10月月更 web开发基础 PHP基础 分支结构 双向条件分支结构

5:数据类型-MySQL

Yeats_Liao

数据库 后端 10月月更

Hash Map源码分析(八)

知识浅谈

hashmap 10月月更

6:列属性完整性-MySQL

Yeats_Liao

数据库 后端 10月月更

final、finally、 finalize 有什么不同?

共饮一杯无

Java final 10月月更

ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本?

程序员欣宸

Java Docker jdk 10月月更

SpringCloud-03 Netflix Ribbon学习笔记

游坦之

10月月更

最近美团前端面试题目整理

loveX001

JavaScript

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

鸿蒙开发实例 | ArkUI JS飞机大战游戏开发

TiAmo

华为 鸿蒙 10月月更

你是如何使用React高阶组件的?

beifeng1996

React

【c++算法篇】--图论之克鲁斯卡尔

贤鱼很忙

c++ 图论 10月月更 克鲁斯卡尔

文件的使用详解

lovevivi

c 文件 10月月更

你真的了解过插槽Slot吗🔥

渔戈

前端 Vue3 10月月更

前端react面试题(边面边更)

beifeng1996

React

【c++图论例题学习】洛谷p1991 无线通讯网-思路详解

贤鱼很忙

c++ 图论 10月月更

7:数据库设计思维-MySQL

Yeats_Liao

数据库 后端 10月月更

面试官:谈谈你知道的DOM常见的操作

CoderBin

JavaScript 面试 前端 DOM 10月月更

基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32

DS小龙哥

10月月更

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章