【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

Zepoch节点持有人数大突破,Nautilus Chain 或有海量空投

EOSdreamer111

mperf:移动/嵌入式平台算子性能调优利器

MegEngineBot

性能分析 移动端 高性能计算

如何提高大数据传输的安全性

镭速

2022 IoTDB Summit:中国核电刘旭嘉《工业时序数据库 Apache IoTDB 在核电的应用实践》

Apache IoTDB

用户案例 数据库·

Log4j on Cloud 如何在云上看日志

纳速云

elasticsearch Serverless 日志 log4j java

玩转Angular系列:组件间各种通信方式详解

echeverra

angular

最佳实践 | 基于腾讯云MRCP-Server打造简单智能外呼系统

牵着蜗牛去散步

人工智能 腾讯云 腾讯 语音识别 智能外呼系统

开心档之Vue教程4

雪奈椰子

VUE 3.0 源码 开心档

快速排查IoT物联网平台问题实用手册——实践类

阿里云AIoT

物联网

一张自拍即可实现变老变年轻,带你感受时光流逝之美

极客飞兔

Python 人工智能 计算机视觉 图像处理 百度飞桨

蚂蚁集团智能可观测平台 HoloInsight 正式开源

TRaaS

APISIX 是怎么保护用户的敏感数据不被泄露的?

API7.ai 技术团队

安全 api 网关 APISIX 敏感数据

开心档之Vue教程1

雪奈椰子

用AppUploader轻松上传IPA文件

雪奈椰子

开心档

业务系统从阿里云物联网平台获取设备数据的3种方案——实践类

阿里云AIoT

数据库 物联网 存储 数据处理 消息中间件

打谱编曲软件GuitarPro8.0中文版下载

茶色酒

GuitarPro

从ChatGPT到MOSS,《流浪地球2》是否会照进现实?

加入高科技仿生人

人工智能 AI 智能化 ChatGPT New Bing

kafka-再均衡原理

领创集团Advance Intelligence Group

kafka 3.X apache 社区 再均衡协议

基于 eBPF 的 Serverless 多语言应用监控能力建设

阿里巴巴云原生

阿里云 Serverless 云原生

开心档之Vue3

雪奈椰子

Vue 开心档

Windows平台上也可以进行iOS App的开发

雪奈椰子

ios app证书

时序数据库 CeresDB 1.0 正式发布

TRaaS

更安全更稳定,阿里云斩获多项云系统稳定安全运行优秀案例

阿里巴巴云原生

阿里云 云原生 安全

开心档之Vue教程2

雪奈椰子

Vue 开心档

Easyrecovery16汉化版电脑数据恢复软件

茶色酒

EasyRecovery16

Zepoch节点持有人数大突破,Nautilus Chain 或有海量空投

股市老人

开心档之Vue5

雪奈椰子

Vue 开心档

什么是bundle id

雪奈椰子

ios app证书

证书申请教程

雪奈椰子

iOS上架 app证书

MyDumper工具介绍

领创集团Advance Intelligence Group

MySQL 多线程 dba MyDumper

IoT离线设备云端控制指令消息触达方案——实践类

阿里云AIoT

物联网 API 网络性能优化

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章