10

我需要在我的 Beaglebone 上的 Linux 上运行 Java 应用程序。我知道 ARM 内核确实支持 Jazelle 技术以在硬件中执行 Java 字节码。无论如何,我不清楚利用这项技术需要什么。我需要以某种方式“激活” Jazelle 吗?我需要一个能识别 Jazelle 的 Java 虚拟机吗?部署和运行利用 Jazelle 技术的 Java 软件的流程是什么?使用 Jazelle 是否需要许可证?

谢谢。

4

3 回答 3

8

Jazelle 是 ARM 架构中的一种执行模式,它“为 Java 虚拟机 (JVM) 执行字节码的硬件加速提供架构支持”——引用自 ARM 架构手册

看起来 Jazelle 也有两种口味;DBX 和 RCT。以下文字来自Cortex-A 系列程序员指南 (v3)。

2.2.2 Jazelle
Jazelle-DBX(直接字节码执行)在 ARMv5TEJ 中被引入以加速 Java 性能,同时节省功耗。此后,内存可用性的提高和即时 (JIT) 编译器的改进相结合,降低了其在应用处理器中的价值。因此,许多 ARMv7-A 处理器没有实现这种硬件加速。

Jazelle-DBX 最适合在内存非常有限的系统(例如,功能手机或低成本嵌入式使用)中提供高性能 Java。在当今的系统中,它主要用于向后兼容。

2.2.3 Thumb 执行环境 (ThumbEE)
在 ARMv7-A 中引入和要求,ThumbEE 有时被称为Jazelle-RCT (运行时编译目标)。它涉及对 Thumb 指令集的微小更改,使其成为在受控环境中运行时生成的代码的更好目标(例如,通过 Java、Dalvik、C#、Python 或 Perl 等托管语言)。ThumbEE 旨在供即时 (JIT) 或提前 (AOT) 编译器使用,它可以减少重新编译代码的代码大小。托管代码的编译超出了本文档的范围。

据我所知,Jazelle-DBX 的大部分用途是在 Java Card 实现中,您确实希望通过微型芯片提供大量性能。这个真正受限的域可以通过直接在 cpu 上执行字节码来利用一些额外的提升。

然而,与 Java 在典型桌面上首次亮相时相比,大多数现代嵌入式系统(如 Beaglebone)已经拥有更多的内存和 CPU 能力,这使得 Jazelle-DBX 不再必要。这主要是因为您将 JIT 编译到本机主机。(JIT 实现对于 Java Card 来说太大了。)

ThumbEE / Jazelle-RCT 的用处也值得怀疑。引用android-porting 讨论

通过所有这些来获得免费的空指针检查没有多大意义。

总而言之,我不知道任何使用 Jazelle 风格的 Java VM 实现,包括 Android 的 Dalvik。如果我必须在嵌入式设备上运行Java ,我会选择:DalvikJamVMJava SE Embedded

于 2012-10-15T22:52:25.937 回答
7

您需要访问http://infocenter.arm.com。beaglebone 使用的是 ARMv7 的 Cortex-A8。在左侧的 Cortex-A 系列处理器下,Cortex-A8 获得最新的手册 r3v2 (rev 3.2)。在 ARM Architecture 下展开 Reference Manuals,您需要 ARMv7-AR(问题 C 是撰写本文时最新的)。

将这些信息用于我的示例

http://github.com/dwelch67/beaglebone_samples

我的 beaglebone 节目中的功能示例:

12345678                                                                        
Hello World!                                                                    
413FC082                                                                        
410330C3                                                                        
00000000                                                                        
00001131                                                                        
00000011                                                                        
00000000                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
13112111                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
12345678               

所以这似乎是一个 r3p2 (rev 3.2) 核心。正如手册所说,支持 ThumbEE、Jazelle、拇指和 ARM。

现在令人困惑的是ti网站上的TRM,ARM trm都说支持Jazelle,直到你关注这个:

Jazelle 扩展

Cortex-A8 处理器提供了 Jazelle 扩展的简单实现。这意味着处理器不会加速任何字节码的执行,所有字节码都由软件例程执行。

在 Jazelle 扩展的实施中:

不支持 Jazelle 状态

BXJ 指令的行为类似于 BX 指令。

这告诉我们一些事情。这是否真的意味着该处理器中没有 Jazelle 硬件,尽管其他地方说它是?

它还向我们展示了运行 jazelle 代码你 bxj 到达那里就像你 bx 在手臂和拇指模式之间切换。所以我试了一下:

.globl bxjtest
bxjtest:
    ldr r0,=skip
    bxj r0
    mov r0,#1
    bx lr
skip:
    mov r0,#2
    bx lr

看起来汇编器实现了 bxj

82000064 <bxjtest>:
82000064:   e59f0044    ldr r0, [pc, #68]   ; 820000b0 <GET32+0x8>
82000068:   e12fff20    bxj r0
8200006c:   e3a00001    mov r0, #1
82000070:   e12fff1e    bx  lr

82000074 <skip>:
82000074:   e3a00002    mov r0, #2
82000078:   e12fff1e    bx  lr

但代码从该地址的 arm 指令返回 2。不知道这是否意味着什么,也许您还需要做其他事情才能让 Jazelle 工作。我得到的印象是那里真的没有 jazelle 核心,我得到的印象是你去购买软件库。

Jazelle 文档似乎是您必须联系 ARM 才能访问的那种。所以我不知道如何实际使用它。

在 ARM 中进一步阅读。ID_ISAR1 寄存器显示为 1,表示

0b0001

添加 BXJ 指令和 PSR 中的 J 位。

此设置可能表示 Jazelle 扩展的简单实现。

然后,ID_PFR0 寄存器的 ARM ARM 描述比 TRM 包含更多信息,它说

Jazelle 扩展的一个简单实现由值 0b0001 指示。

0b0001 是我们在该寄存器中为该字段读取的内容。

我挖掘得越多,这似乎是一个“微不足道的实现”,这对我来说意味着“不存在”。JMCR 寄存器显示,如果它是一个简单的实现,那么读取应该返回为零(RAZ),写入应该被忽略(WI),它们是,我写了一个,读回它是一个零。即便如此,我尝试了 BXJ 指令,它仍然执行 arm 代码。

于 2012-10-16T05:17:09.063 回答
3

基本上,作为产品供应商,您从 ARM 获得许可(付费)在 Jazelle 技术上启用和运行您的代码的能力。费用将基于预测数量、实际结果等。我不熟悉实际的价格水平。当进入/退出 Java 代码时,需要某些代码片段将 CPU 切换到不执行字节代码。除非您为特权付费,因为设备供应商 Jazelle 无法运行并且可以被悄悄忽略。第一代 Jazelle 解决了在 RAM 空间受限的系统上快速执行 Java 的需求,在此之前,字节码解释器是唯一可用的选项。JIT 需要 RAM 进行编译,早期的手机通过减小内存大小来优化低成本。一些最早的音乐手机使用 Jazelle 来提高 MIDlet 执行性能,但在随后的产品中,内存很快就可以适应各种多媒体智能手机级别的功能。然后,JIT 编译器变得可行,并且在整体性能方面实际上表现出色。Jazelle 在大多数情况下只是将字节码映射到机器码中的二进制文件,可以说“不能比字节码运行得更快”。虽然 JIT 有时可以将特定系列的字节码序列映射到有效的本机代码,该本机代码运行速度比基于一次一个单独的字节码操作更快。所以早期的 Jazelle 模式不再真正有用了。RAM 的增长使 JIT 更加可行。Jazelle 在大多数情况下只是将字节码映射到机器码中的二进制文件,可以说“不能比字节码运行得更快”。虽然 JIT 有时可以将特定系列的字节码序列映射到有效的本机代码,该本机代码运行速度比基于一次一个单独的字节码操作更快。所以早期的 Jazelle 模式不再真正有用了。RAM 的增长使 JIT 更加可行。Jazelle 在大多数情况下只是将字节码映射到机器码中的二进制文件,可以说“不能比字节码运行得更快”。虽然 JIT 有时可以将特定系列的字节码序列映射到有效的本机代码,该本机代码运行速度比基于一次一个单独的字节码操作更快。所以早期的 Jazelle 模式不再真正有用了。RAM 的增长使 JIT 更加可行。

于 2013-02-08T02:56:57.977 回答