写点什么

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

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

关注

评论

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

StarRocks & Friends 上海站活动回顾(含 PPT 下载链接)

StarRocks

数据库 OLAP MPP 大数据 开源

什么是区块链?

TiAmo

区块链 去中心化 6 月 优质更文活动

Go语言中的init函数: 特点、用途和注意事项

EquatorCoco

编程 Go 语言

入门指南:使用Spring Boot构建Java应用程序

2756

入门学习

3dMax 应该用哪个渲染器?Vray、Corona、Arnold?

Finovy Cloud

AI与企业信息安全的应用、技术以及前景

行云管家

AI 网络安全 信息安全 企业信息

小程序容器技术在移动警务中的业务价值

FinFish

小程序容器 移动警务 警务app

强化学习从基础到进阶-案例与实践[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 A3C算法

New Arrival: QCN9074 Dual Band/Tri-band 4X4 WIFI6 Network Card DR9074 (#QCN9074)

wallyslilly

QCN9074

IoT场景时序数据库性能对比报告出炉,TDengine 远超 InfluxDB & Timescal

电子信息发烧客

工业物联网SCADA软件推荐

2D3D前端可视化开发

工业物联网 工业控制系统 web组态软件 HMI SCADA软件

解决QT QGraphicsView提升到QChartView报错的问题

芯动大师

Flutter性能优化的一些路径思考

Onegun

flutter 移动开发

沐曦与百度飞桨完成兼容性测试,助力计算机视觉应用发展

飞桨PaddlePaddle

人工智能 百度 paddle

最佳实践|亚马逊可持续发展的架构模型

亚马逊云科技 (Amazon Web Services)

JavaScript

一图看懂华为云CodeArts Board5大特性,带你玩转看板服务

华为云PaaS服务小智

云计算 数据可视化 华为云 企业研发管理 数据看板

实现 AI 大语言模型的关键在于超高性能存储能力

焱融科技

架构实战营(一)

架构实战营

STC89C52+DHT20设计的环境温湿度检测仪

DS小龙哥

6 月 优质更文活动

李彦宏:AI原生应用比大模型数量更重要

飞桨PaddlePaddle

人工智能 百度 paddle 大模型

华为开发者大会—开发者的一站式代码检查利器:华为云代码检查CodeArts Check

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023

复旦发布云上最大科研智算平台

新云力量

智能 计算 复旦 科研智算平台

es笔记一之es安装与介绍

Hunter熊

elasticsearch Kibana 安装Kibana

强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动

提升测试质量的四个关键特征

老张

质量保障 测试质量

零基础自学:2023年的今天,请谨慎进入网络安全行业

网络安全学海

黑客 网络安全 信息安全 计算机 渗透测试

复旦大学智能计算平台与世界科学智能大赛启动仪式

新云力量

智能 计算 复旦大学

搜索语义模型的大规模量化实践

百度Geek说

paddle NLP 大模型 企业号 6 月 PK 榜 6 月 优质更文活动 INT8

直播程序源码技术分享主播邀请上麦功能

山东布谷科技

软件开发 程序 源码搭建 直播源码

浅析 Jetty 中的线程优化思路

vivo互联网技术

jetty EatWhatYouKill 线程策略

目前包头市等保测评企业有几家?2家还是3家?

行云管家

等保 等级保护 等保测评 等保合规

OpenJDK更新了InvokeDynamic_Java_Charles Humble_InfoQ精选文章