越是高级的语言,其编译和运行的系统开销就越大,应用程序也越大,运行越慢。因此一般来说,编程人员都会首选汇编语言和C语言,然后才会考虑C++语言或Java语言。
但是随着不断增长的市场需求,很多嵌入式设备必须适应网上交流的需要,为了迎合此要求,考虑到开发Internet应用程序的便利,众多开发者都发现使用Java语言是有意义的。另外随着内存及32位处理器价格的下降,最初在嵌入系统使用Java太昂贵的问题不再有了,使用Java的成本开始减少。于是,Java在嵌入式领域迎来了新的机会。
Java语言的优点在于:它最初是由理解和信仰网络计算梦想的一个小巧而专注的开发组设计的,虽然该语言最初的实施方案有点缺陷,但为了这个梦想,设计者们很少在技术上妥协,结果诞生了一种专为以相互通信为主要目的的设备而设计的语言。有许多技术上的优点都可能会引导嵌入系统开发者选择Java.
优点1:与处理器无关
Java的第一个优点就是与处理器无关。传统上,嵌入程序就是针对特定的微处理器设计并在其上运行的,而C语言程序的可移植性则可通过编译或交叉编译来保障。但是利用Java,一个程序可以存储在一个系统上,而被下载并运行在完全不同的另一个系统上;设备可能从不同地方下载一些程序在一个处理器上运行,或者不同的处理器运行同一个程序,并通过网络在相互间传递数据。使用Java,一个嵌入式系统就可能成为一个通用的通信设备,能下载并运行能完成特定任务的程序。
对嵌入式系统而言,这是一个新的模型,已经有一些开发者正在向它靠拢。例如,电视机顶盒的供给商已公布要在机顶盒内植入JVM,以使用户能通过Java applets在他们观看电视的同时接收到该电视节目的一些内容。例如在观看足球比赛时,看到的支持内容就可以是对球员的技术统计,在看电影时,看到的支持内容就可以是演员的背景资料。
这是一个恰当的设计和实施模型,首先它可以使开发平台的选择更加灵活,无需在与目标相同的平台上开发,也不用关心交叉编译的问题,因为Java字节码能在任何有JVM的操作系统中运行。其次,这种模型带来的另一个优点是几乎所有的检测和调试可以独立于目标设备来进行。虽然由于个别JVM有时有兼容性的问题,应该在所有将用到该程序的平台上测试它。但一般来说,并不要高级而昂贵的、配备有逻辑探针、ICE以及其他调试工具的、针对目标平台的开发环境。
优点2:提高开发速度和可维护性
Java是一种纯粹面向对象的语言。Java类被组织成一个等级层次,在层次结构中,一个子类能够继续其超类的行为,并可用子类所具备的一些特有功能来扩展其超类的功能。对象模型是能定义对应真实事物的数据结构,使得程序的任务和任务如何实现二者之间的转换变得基本上透明。
面向对象的设计和编程的优点在于其开发速度和代码的可维护性,许多面向对象的开发都能通过利用和更改现存类库来完成,而不是创造一个新的结构。这就使开发加快了,Sun‘s Java Workshop(一个完全用Java写的IDE)的开发者能在几个月内建立一个功能齐备的图形IDE就是一个很好的证据。面向对象的方法还尽量使用自然的结构,使其有很高的可读性,并且可轻易更改和加强。
优点3:安全性高
由于有了JVM,一个Java应用程序与操作系统或硬件完全隔绝,因此计算机病毒或其他作祟的代码就很难获得对设备的控制。虚拟机是主机设备和那些可能难以确定其质量和可靠性的软件之间的一个保护层。
另外,Java设计者从该语言中去掉了指针变量的概念。Java不能任意访问内存,只能读写有Java内存分配治理系统创建的对象。由于Java编译器所强制的严格的分类机制,从理论上来说,访问那些未分配给程序的内存区域是不可能的。这个限制使得写恶意代码变得非常困难了。当然,这个保护并不完善,有人已经在Java安全模型中找到漏洞,但是,JVM确实提供了一定的保护,使得几乎不可能直接在硬件上运行代码。
对Java applet施加的限制就更加严格了。由于Java applet被设计成从Internet上下载,因而被视为不可信任的代码,除非它包括用户已认定为可信任的主机的数字指纹。JVM在内存的一个称之为sandbox的区域运行诸如applet这种不可信任的代码。它给每个applet分配资源和特权,并将其限定在这些分配区域范围中。除了这些限制,sandbox模型还施加如下限制: 禁止读写当地计算机文件系统; 网络操作被限止,禁止不被信任的代码建立与任何计算机的网络连接,它也不能在任何小于1024的端口号上监听和接受连接; 在运行不被信任代码的线程组以外,禁止访问或创建线程。