低占用的 Java 到本地代码编译方案:使用形式化方法
1. 引言
在嵌入式和资源受限系统中启用 Java 是当今行业和研究团体面临的重要挑战。Java 具有执行安全和低占用程序代码等特性,这使其在内存受限的嵌入式设备中颇具吸引力,Java 卡的成功就是例证。然而,Java 的内存占用和安全特性是以程序执行速度较慢为代价的,对于处理能力有限的主机设备而言,这可能是个问题。目前,智能卡对 Java 的需求仍在增长,下一代智能卡操作系统更接近标准 Java 系统,但运行时性能仍是一个亟待解决的问题。
为提高 Java 系统的运行时性能,常见做法是将部分程序字节码转换为本地代码。这样做虽然能去除解释层,提高执行速度,但会大幅增加程序的内存占用。通常,本地代码的大小约为 Java 代码的三到四倍,这是由于本地指令的紧凑性较差,以及虚拟机实现的许多安全检查必须在本地代码中重现。
运行时检查对于 Java 虚拟机的安全至关重要,但大多数情况下,它们是作为防止编程错误或恶意代码的保护机制。运行时异常通常是由异常、意外的程序行为导致的,在执行正常代码时很少抛出,因此安全检查大部分时间是无效的,在本地代码中还会无谓地增加代码体积。此前虽有研究提出对这些检查进行分解或在某些情况下消除它们,但都未能在不危及系统安全的前提下完全消除。本文将使用形式化证明确保程序中的运行时检查永远不会为真,从而安全地从生成的本地代码中完全消除这些检查。
2. Java 与提前编译
2.1 提前编译(AOT)和即时编译(JIT)
提前编译(AOT)和即时编译(JIT)是提高 Java 程序效率的常见方法。二者都以 Java 字节码为输入,生成虚拟机运行架构
超级会员免费看
订阅专栏 解锁全文
84万+

被折叠的 条评论
为什么被折叠?



