写点什么

在 iOS 上运行 Java:Gluon 介绍 OpenJDK 移动资源和自动化构建流水线

作者:Ben Evans

  • 2025-11-19
    北京
  • 本文字数:1661 字

    阅读完需:约 5 分钟

大小:839.15K时长:04:46
在iOS上运行Java:Gluon介绍OpenJDK移动资源和自动化构建流水线

备受期待的 iOS 上的 Hotspot 项目报告了重大进展——OpenJDK 现在能够在 iOS 上构建和运行。这是一段很久以前就开始的旅程的下一个里程碑——InfoQ 最早在 2015 年就对此做了报道

 

最近,OpenJDK 的移动仓库(这是主仓库的下游)已经能够构建 libjvm 的静态版本,允许 iOS 二进制文件执行 Java 代码。

 

Johan Vos(Gluon)是一位长期的 Java 移植者(一直追溯到 Blackdown 时代),他作为 OpenJDK 移动项目的项目负责人,一直在领导这项工作。

 

他告诉 InfoQ,“一个 Java,运行在任何平台上”的概念仍然是关键,鉴于 Java 仍然是后端和云系统的性能、可扩展性和可维护性应用程序的一个很好的选择,没有理由说 Java 开发者不能使用他们喜欢和擅长的语言和生态系统来创建移动应用程序。

 

该项目基于 Zero 解释器(之所以这样称呼,是因为它是用纯 C++编写的,并且完全没有与平台绑定的汇编代码)。这是 Hotspot 在构建时可以配置的两种不同的解释器之一。大多数 Java 构建使用“模板解释器”,它基于在 JVM 启动时动态构建字节码的分派表。

 

“如果开发者编写 Java 代码,他们期望该代码应该在支持相同 Java 版本的任何设备上运行。我们过去几个月专注于 Zero 的主要原因是,它允许我们与最新的上游 OpenJDK 代码保持一致。使用 Zero 允许我们测试所有的 JDK 类和特性,并且它允许我们明确区分功能工作和性能工作。”Vos 解释道。

 

预计 Java 应用程序在 iOS 上的性能将面临一些挑战,因为苹果不允许应用程序使用运行时生成的汇编代码,这不仅排除了模板解释器,也排除了 JIT 编译器。

 

尽管如此,Vos 对 Zero 的性能印象深刻,他说“Zero 作为一个解释器做得非常出色。然而,仅靠 Zero 还不足以创建高性能的 iOS 应用程序。”他还提到了之前的方法,该方法使用了 RoboVM 和 GraalVM 的 AOT 编译器,提前编译所需的 Java 方法,然后使用修改过的 VM 执行这些方法。这种技术可提供令人印象深刻的性能(与使用 Objective-C 或 Swift 时的性能相当),但问题是这种方法附带的 VM 与 OpenJDK 不是 100%对齐。

 

新策略是使用 Zero 增强 AOT 编译方法和其他来自 OpenJDK 的Project Leyden的改进,以规避苹果的“无 JIT”规则。Project Leyden 的主要目标不是修复移动设备的性能,但目前在 Leyden 进行的工作是适用的,并且保证与 OpenJDK 中开发的 JVM 和 JDK API 紧密对齐。

 

Vos 将 Leyden 与之前用于在 iOS 上运行 Java 应用程序的部分 AOT 方法进行了比较——其中“一些”Java 方法在应用程序开始运行之前已经编译。他认为,Leyden(用于提前创建本地代码)和 Zero(用于运行未提前编译的动态代码)的结合可能是 Java 在 iOS 上的获胜组合,因为它允许完全执行,而不会牺牲 Java 的(通常被低估的)动态特性。

 

另一项工作涉及为 Android 编译 OpenJDK 二进制文件以执行未修改的 Java 应用程序——与为 DEX 字节码格式编译以由 Android 运行时(ART)执行不同。预计这将比 iOS 工作的技术复杂性要低,因为 Android 环境中没有动态代码限制。

 

移动 OpenJDK 项目目前的状态是可以为 iOS 和 Android 编译 VM 和类库,并且可以在真实设备上部署和运行。Java 库作者应该能够用当前的状态部署他们的库,但下一步是启用转换为 iOS 和 Android 的本地库。

 

然而,许多 Java 开发者将希望创建的不仅仅是一个库,而是为移动设备创建一个完整的应用程序。这需要一个 GUI 工具包,移动 OpenJDK 采取的方法是使用 OpenJFX 来实现这一功能。基础的 JavaFX 库已经在 iOS 和 Android 上编译成功,但需要更多的工作来与低级别的平台本地图形 API 集成,以实现硬件加速渲染。

 

OpenJDK 移动所采取的方法侧重于可维护性,与 OpenJDK 100%对齐。因此,许多程序员熟悉的完整开发人员友好工具集仍在开发中。然而,Vos 相信,现在基础更加稳定,不同领域的开发者(编译器、工具、UI、库)将加入这项工作。目的是使团队能够创建或将当前工作集成到他们的项目中,并生产跨平台的工具和应用程序,而不必担心来自较低层级的破坏性变化。

 

一个新的社区项目也已经建立,允许感兴趣的开发者合作,以确定下一步需要采取的措施,使 Java 成为现代移动设备上的一等公民。

 

原文链接:Running Java on iOS: Gluon Introduces OpenJDK Mobile Resources and Automated Build Pipelines

2025-11-19 12:554

评论

发布
暂无评论

书单 | 5月,这10本上榜新书带你打开新世界的大门!

博文视点Broadview

自动驾驶等级家喻户晓,小微企业宽带等级你知道吗?

脑极体

未来已来:云原生时代(二)云计算发展现状调研

看,未来

云原生

企评家,企业成长性评价系统怎么用?

企评家

企业成长性分析 企评家 企业投资价值评价

对象存储 S3 在分布式文件系统中的应用

焱融科技

对象存储 存储 分布式存储 云存储

硬之城获阿里云首批产品生态集成认证,携手阿里云共建新合作

阿里巴巴云原生

阿里云 云原生 合作伙伴 合作

「开源人的福音」一键部署Java构件到Sonatype

Jianmu

后端 持续集成 开源项目 部署 Java构件

面向高校 | “云原生技术应用与实践”示范课程项目开放申报

阿里巴巴云原生

阿里云 云原生 云原生课程

Docker实践经验(四)docker 上部署 mysql8 主从复制

看,未来

战码先锋直播预告丨参与ArkUI,共建OpenHarmony繁荣生态

OpenHarmony开发者

Open Harmony

UniqueMergeTree:支持实时更新删除的ClickHouse表引擎

字节跳动数据平台

Clickhouse 表引擎 实时

什么是时序数据库

领创集团Advance Intelligence Group

Kubernetes下Stdout日志白名单最佳实践

观测云

可观测性 可观测

Docker 实践经验(三):Docker 容器数据卷

看,未来

ZooKeeper 在阿里巴巴的服务形态演进

阿里巴巴云原生

Apache zookeeper 阿里云 开源 云原生

易周金融分析 |“一参一控一牌”落地;两家支付机构更名

易观分析

金融 银行

Docker实践经验(二)镜像的构建、镜像仓库、压缩、导入

看,未来

未来已来:云原生时代(一)云计算如何一步步走来?

看,未来

Docker 实践经验(一)简介、安装与实操

看,未来

云原生

Docker 实践经验(五)docker上部署 redis 三主三从集群

看,未来

云原生

基于边缘计算的云游戏场景实践

火山引擎边缘云

最佳实践 边缘计算 实时音视频 云游戏

优秀标杆!华泰证券多芯协同云网管理平台

BoCloud博云

多云管理平台 多云管理

11年程序员给本科、研究生应届生以及准备从事后台开发同学的建议,学习进阶之路

C++后台开发

后台开发 社招 应届生 Linux服务器开发 校招

Spring之 @Component和@ComponentScan注解用法介绍和注意事项

echoes

【直播预告】研发效率百倍提升的秘密,这些破圈思路了解一下!

FinClip

小程序 finclip 直播预告

Vue进阶(贰零捌):ES6 对象解构

No Silver Bullet

ES6 5月月更 对象解构

Docker 实践经验(六):Docker 网络

看,未来

云原生

国产ETL数据仓库调度平台TASKCTL对于Kettle作业类型的转换使用

敏捷调度TASKCTL

DevOps 数据仓库 kettle ETL 自动化运维

一份优秀的产品帮助文档怎么写?

小炮

React 实现 PDF 文件在线预览 - 手把手教你写 React PDF 预览功能

蒋川

JavaScript react.js 低代码 CRM pdf预览

架构实战营 - 第 6 期 模块七课后作业

乐邦

「架构实战营」

在iOS上运行Java:Gluon介绍OpenJDK移动资源和自动化构建流水线_编程语言_InfoQ精选文章