Arm 小猎犬骨上的Jazelle

Arm 小猎犬骨上的Jazelle,arm,cortex-a8,jazelle,Arm,Cortex A8,Jazelle,我需要在Beaglebone上的Linux上运行Java应用程序。我知道ARM内核确实支持Jazelle技术在硬件中执行Java字节码。无论如何,我不清楚我需要什么来利用这项技术。我是否需要以某种方式“激活”Jazelle?我需要一个支持Jazelle的Java虚拟机吗?部署和运行利用Jazelle技术的Java软件的流程是什么?使用Jazelle是否需要许可证 谢谢。Jazelle是ARM体系结构中的一种执行模式,它“通过Java虚拟机(JVM)为字节码执行的硬件加速提供体系结构支持”——引自

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


谢谢。

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

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

2.2.2 贾泽勒
在ARMv5TEJ中引入了Jazelle DBX(直接字节码执行)来加速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卡实现中,在Java卡实现中,您确实希望通过一个微型芯片提供大量性能。这个真正受限的域可以通过直接在cpu上执行字节码来利用一些额外的提升

然而,大多数现代嵌入式系统(如Beaglebone)的内存和cpu能力已经超过了Java首次出现在当时的典型台式机上时的水平,这使得Jazelle DBX不再必要。这主要是因为您获得了到本机主机的JIT编译。(JIT实现对于Java卡来说太大了。)

ThumbEE/Jazelle RCT的有用性也值得怀疑。引述:

通过所有这些来获得免费的空指针检查并不能使 很有道理

总之,我不知道有任何Java虚拟机实现使用任何Jazelle风格,包括Android的Dalvik。 如果我必须在嵌入式设备上运行Java,我会选择,或者。

您需要转到。beaglebone使用Cortex-A8,它是ARMv7。在左侧Cortex-A系列处理器下,Cortex-A8获得最新的r3v2手册(版本3.2)。在ARM架构下展开参考手册,您需要ARMv7 AR(C版是本文撰写时最新的版本)

把这些信息带到我的例子中

my beaglebone上的功能示例显示:

12345678                                                                        
Hello World!                                                                    
413FC082                                                                        
410330C3                                                                        
00000000                                                                        
00001131                                                                        
00000011                                                                        
00000000                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
13112111                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
12345678               
因此,这似乎是一个r3p2(版本3.2)核心。正如手册所说,ThumbEE、Jazelle、thumb和ARM都受支持

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

贾泽勒延伸

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

在实施Jazelle扩展时:

不支持Jazelle状态

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

这告诉我们一些事情。这真的意味着这个处理器中没有Jazelle硬件,尽管其他地方也这么说吗

它还向我们展示了运行jazelle代码时,您可以使用bxj到达那里,就像您使用bx在arm和thumb模式之间切换一样。所以我试了一下:

.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
82000064:
82000064:e59f0044 ldr r0,[pc,#68];820000b0
82000068:E12FF20 bxj r0
8200006c:e3a00001 mov r0,#1
82000070:E12FF1E bx lr
82000074 :
82000074:e3a00002 mov r0,#2
82000078:E12FF1E bx lr
但是代码从该地址的arm指令返回一个2。不知道这是否意味着什么,也许你还需要做其他事情才能让Jazelle工作。我得到的印象是,虽然那里真的没有jazelle内核,但我得到的印象是,你去买软件库

Jazelle文档似乎是您必须联系ARM才能访问的类型。因此,我不知道更多的是如何实际使用它

在手臂上读得更远。ID_ISAR1寄存器显示1表示

0b0001

在PSR中添加BXJ指令和J位

此设置可能表示Jazelle扩展的一个微不足道的实现

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

Jazelle扩展的一个普通实现由值0b0001表示

0b0001是我们在寄存器中读取的字段

我挖得越多,这看起来就越像是一个“微不足道的实现”,这对我来说意味着“不存在”。JMCR寄存器显示