首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Beaglebone上的Jazelle

Beaglebone上的Jazelle
EN

Stack Overflow用户
提问于 2012-10-16 05:55:35
回答 3查看 4.6K关注 0票数 10

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-16 06:52:26

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

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

2.2.2 Jazelle

Jazelle DBX(直接字节码eXecution)是在ARMv5TEJ中引入的,目的是在节省能源的同时提高性能。内存可用性的增加和即时(JIT)编译器的改进相结合,降低了它在应用程序处理器中的价值。因此,许多ARMv7-A处理器没有实现这种硬件加速。

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

2.2.3 Thumb执行环境(ThumbEE)

在ARMv7-A中引入并要求,ThumbEE有时被称为Jazelle-RCT (运行时编译目标)。它涉及到对Thumb指令集的小更改,使其成为在受控环境(例如,由诸如Java、Dalvik、C#、Python或Perl等托管语言)运行时生成的代码的更好目标。ThumbEE被设计为供即时或提前编译器使用,在这些编译器中,它可以减少重新编译代码的代码大小。托管代码的编译不在本文档的讨论范围内。

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

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

ThumbEE /Jazelle-RCT的有用性也值得怀疑。引用android-porting discussion

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

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

票数 8
EN

Stack Overflow用户

发布于 2012-10-16 13:17:09

你需要去http://infocenter.arm.com。beaglebone使用的是Cortex-A8,这是一个ARMv7。在Cortex-A系列处理器左侧,Cortex-A8获得最新的手册r3v2 (3.2版)。在ARM架构下,展开您想要的ARMv7-AR的参考手册(问题C是撰写本文时的最新版本)。

将这些信息带到我的示例中

http://github.com/dwelch67/beaglebone_samples

在我的beaglebone上显示的功能示例:

代码语言:javascript
复制
12345678                                                                        
Hello World!                                                                    
413FC082                                                                        
410330C3                                                                        
00000000                                                                        
00001131                                                                        
00000011                                                                        
00000000                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
13112111                                                                        
00000000                                                                        
00000000                                                                        
00000002                                                                        
12345678               

因此,这似乎是一个r3p2 (3.2版)核心。正如手册上说的那样,ThumbEE、Jazelle、拇指和手臂都是有支撑的。

现在令人困惑的是ti网站上的TRM,ARM trm都说Jazelle是受支持的,直到你关注以下内容:

Jazelle扩展

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

在Jazelle扩展的实现中:

不支持Jazelle状态

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

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

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

代码语言:javascript
复制
.globl bxjtest
bxjtest:
    ldr r0,=skip
    bxj r0
    mov r0,#1
    bx lr
skip:
    mov r0,#2
    bx lr

并且看起来汇编器实现了bxj。

代码语言:javascript
复制
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才能访问的文档。所以我不知道更多的是如何实际使用它。

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

0b0001

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

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

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

Jazelle扩展的简单实现由值0b0001表示。

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

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

票数 7
EN

Stack Overflow用户

发布于 2013-02-08 10:56:58

基本上,作为产品供应商,您需要向ARM授权(付费)在Jazelle技术上启用和运行代码的能力。费用将基于预测的数量,实际结果等。我不熟悉实际的价格水平。进入/退出Java代码时,需要某些代码片段将CPU切换到字节代码执行之外。除非你为设备供应商的特权买单,否则Jazelle是不可操作的,可以被悄悄地忽略。第一代的Jazelle满足了在RAM空间有限的系统上快速执行Java的需求,在此之前,字节码解释器是唯一可用的选择。JIT需要RAM来编译,早期的手机通过保持较低的内存大小来优化成本。一些最早的音乐手机使用Jazelle来提高MIDlet的执行性能,但在随后的产品中,内存很快就增长到可以容纳各种多媒体智能手机级别的功能。然后,JIT编译器变得可行,并且实际上在整体性能上优于其他编译器。Jazelle在很大程度上只是将字节码映射到机器码中的二进制代码,可以说“不能比字节码运行得更快”。而JIT有时可以将某些字节码序列映射到有效的本机代码,其运行速度比基于单个字节码操作一次一个的情况下运行得更快。所以早期的Jazelle模式已经不再有用了。RAM的增长使得JIT更加可行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12904635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档