我需要在我的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 Jazelle总之,我不知道有任何使用包括Android Dalvik在内的Jazelle版本的Java虚拟机实现。 如果我必须在嵌入式设备上运行Java,我会选择Dalvik、JamVM或Java SE Embedded之间。通过所有这些来获得免费的空指针检查并没有多少意义。
12345678
Hello World!
413FC082
410330C3
00000000
00001131
00000011
00000000
00000000
00000000
00000002
13112111
00000000
00000000
00000002
12345678
看起来这是一个r3p2(rev 3.2)核心。根据手册,支持ThumbEE、Jazelle、thumb和ARM。
现在令人困惑的是ti网站上的TRM和ARM trm都说支持Jazelle,直到你关注这个:
Jazelle扩展
Cortex-A8处理器提供了Jazelle扩展的简单实现。这意味着处理器不会加速任何字节码的执行,所有字节码都由软件例程执行。
在Jazelle扩展的实现中:
不支持Jazelle状态
BXJ指令的行为类似于BX指令。
这告诉我们一些事情。这真的意味着这个处理器中没有Jazelle硬件,尽管其他地方说有吗?
它还向我们展示了要运行jazelle代码,您需要使用bxj进行切换,就像切换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