Java嵌入式开发的优势及有点总结

使用 Java 为嵌入式设备开发应用程序,除了最好的语言质量外,还可以保证减少用于项目创建的时间和成本,这要归功于各种用途和现有支持。那么,让我们看看为什么应该将 Java 用于嵌入式系统的其他一些原因:

上市时间很重要,提供更少的开发时间:Java 具有理想的内存管理,更容易检测错误(并修复它们);

推荐用于 5 屏以上的 GUI 项目;

从第一个版本开始的坚固性(由于包装概念、设计模式和 SOLID 原则);

简单;

可移植到不同的 CPU 或操作系统(无需重写代码);

安全性,支持加密敏感数据;

大量独立于操作系统的库;

可在桌面和远程调试;

在高级语言和高性能方面的最佳折衷(取决于所使用的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的端口号上监听和接受连接;在运行不被信任代码的线程组以外,禁止访问或创建线程。

优点4:内存管理简单

Java的内存管理远比其他语言简单,因为它不使用指针。当对象被实例化时,内存被动态分配。正如我们前面分析的,对个别内存地址的访问被Java的设计者视为一个对安全的潜在危险,因此,访问也被禁止。去掉指针的结果不仅提高了安全性,还简化了编程,错误也减少了。

为了理解Java怎样分配内存,我们拿Java与C语言比较一下。在C语言中,可以用值或引用的方式来访问数据。事实上,出于灵活性和控制考虑,非原始数据类型都由引用方式来存取,即通过指针访问。因此,值和引用的不同变得非常清楚,特别是开发者不得不使用不同的符号(*和&)来存取数据。要用这两种不同的访问方式,必须清楚理解它们是什么以及为什么应该使用这一个,而不使用那一个。

在Java中,由值和引用来存储是无缝的,尤其因为其符号都一样。两者间惟一不同在于数据类型本身:所有原始数据类型始终由值的方式存取;所有对象,包括字串、数组以及文件流,始终由引用方式访问。声明为原始数据变量类型包含该变量的值,声明为对象的变量则包含对该对象(即该对象的地址)的一个引用,而非对象自身的引用。仅仅声明一个对象变量并不给对象分配内存,必须用“new”关键字来分配内存和创建对象。

这两种方法最根本的不同在于:不可能像在C中那样就Java内存地址做指针算术或其他操作。Java中对象的地址是相对的(或虚拟的),它由虚拟机任意分配,因此你没有理由还想要指针地址。

优点5:具有垃圾收集功能

垃圾收集功能自动收集内存中未引用的内存,并将其归回空闲内存链表中。JVM使用此功能将不在使用的内存还给系统。当Java程序说明并实例化一个对象或数组时,它仅仅做一个JVM请求,访问其下面的系统内存(通常是通过主机操作系统)并分配内存,Java的垃圾收集系统通过内存收集对象,然后检查它们的引用链。Java的垃圾收集系统的工作方式一般是搜索内存中的对象,然后检查它们的引用表。它计算程序中有多少变量当前正在引用每个对象。若对象的引用数目为零,它知道此对象不再在使用了,它的内存可以收回。其结果就是,不必像C语言那样,要人工来释放分配的内存。在C语言中,释放内存是一个必要、耗时且易出错的细节。Java自动而精确的处理此过程,去除了C/C++程序中那种常见的错误致因。

优点6:网络实现方便

由于今天的嵌入式系统通常都是面向网络的,采用内置网络支持的语言节约了在实现网络协议和通信程序方面耗费的大量时间和努力。在Java中,网络类包括 TCP/IP流和使用TCP及UDP的数据报程序,用于HTTP和URL服务的操作方法,以及错误检查代码和恢复功能。虽然实现网络也可能用其他语言,比如C语言,但那些语言要求特别的附件软件包、DLL,或其他必须由操作系统或者第三方销售提供的程序模块。特别附件通常要求有操作系统或第三方工具的知识,不像Java,有标准的、内置的网络支持。Java包括网络包是必要的,因为设计者不能对一个作为基础的操作系统的网络设施做任何假定,它们必须包括集成网络程序库,以确保Java程序能在所有平台上工作。

优点7:可以实现动态配置

动态配置是指系统启动时的用户制定配置或重新配置。需载入特殊的硬件配置、网络参数或在引导期间支持特定用途的一些实用程序的系统,常常使用动态配置。Java以动态捆绑来支持动态配置。当组成一个程序的各个类文件编译成字节码时,在类文件之间,或者对JVM包的类(如图形、网络以及核心语言支持)引用,还没有被解决。当JVM载入程序启动时,它动态的载入并捆绑(即链接)程序引用的所有的类。因此,要改变系统配置,需要做的就是修正相应的类文件。下一次启动时,JVM自动捆绑新文件到你的程序中,而新的配置将生效执行。

优点8:可以轻松诱捕和处理错误

与许多操作系统和程序不同,对嵌入系统而言,重新启动通常是无法接受的。这意味着嵌入式系统都必须足够坚实,能够以截取错误来防止程序或整个设备崩溃。

程序错误的致因很多。相对来说,很少是因为继承逻辑错误,而大多数程序的崩溃是因为意外输入,或者是因为程序不能调用系统资源来完成某个特定操作造成的。所以,必须能够预料这些问题,并要能够诱捕它们,以免引起更大的问题。虽然,能用几乎任何程序设计语言来诱捕和处理错误,不过如果有内置的设施来做这类工作,比如像Java那样,会有极大的帮助。

在Java中,由抛出(产生)一个异常来提示错误。使用专门为异常处理而设计的语句(关键字try、catch、和finally),程序能将其错误处理代码安排到几个集中区域中。try程序块是程序执行的正常流程,当一个异常发生在 try块(包括该嵌套块中的各层子程序)中,控制就交给了catch块。不管是否有异常发生,finally块中的代码始终要被执行。未被处理的异常会由调用堆栈自下而上传播JVM并终止程序。不再需要动手编程来将错误状态通过几层函数调用返回。而是,在错误发生由检测错误的代码直接抛出一个异常。这极大地简化了应用程序中的错误处理代码,进而获得更好地错误处理效果和更坚实可靠的代码。

优点9:提供对线程管理的直线支持

大多数操作系统都给一个进程产生和管理多个线程的能力,这些线程彼此独立地完成不同的任务。但是,很少由程序语言提供对线程管理的直线支持,通常都需要直接调用操作系统功能。Java却相反,直接在语言中提供了产生、管理和协调同步线程的功能。与Java的其他特点一样,该功能是必要的,因为设计者不敢确定底层的操作系统是否支持多线程。

开发者越来越多地在程序中使用线程,将其作为满足一个程序不能完成的,通常相互无关的一些任务的一种手段。由于Java对线程有内置语言支持,以创建Java多线程较之与其他语言更简单、更自然。

优点10:图形功能强大

JVM包括一个庞大的图形及窗口支持程序包,称为Abstract Windowing Toolkit(AWT)。用AWT,能在应用程序中快速而轻易地创建精致而强大的图形用户界面。对于需要精细的用户界面的嵌入系统来说,AWT能节省大量开发时间,从而使产品更快地走向市场。

到此这篇关于Java嵌入式开发的优势及有点总结的文章就介绍到这了,更多相关Java嵌入式开发的优势内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java如何使用Jetty实现嵌入式的Servlet容器

    最近在项目中遇到关于jetty的问题,所以在网上做一些科普,接下来就给大家做一些分享: Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty. Jetty下载地址,本文写作时的最新版本是9.1.2,下载jetty-distribution-9.1.2.v20140210.zip: 注意Jetty 9需要JDK 7,如果使用JDK 6的话会出现错误:jav

  • Java中嵌入式MySQL的使用方法

    这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作.但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件.再去安装数据库可能就比较麻烦了. 其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭.下面提供一些代码片段,具体的会提供下载地址. 这个是核心代码类,这个类实现了Mysql 的启动和停止以及数据库的启动状态. package net.simple.mysql; i

  • Java程序开发环境配置图文教程

    1.前言 我学习Java已经将近一个月的时间了,从一个小白开始慢慢摸索,现在已经逐渐进入状态,学会了一些东西,故将自己从0开始的经历分享出来.我们要使用Java编写程序首先需要在计算机中搭建Java的开发环境,本文包含JDK的安装和Java编译环境配置的方法,不足之处请多多包含. 2.JDK的安装 JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具,要进行

  • Python用来做Web开发的优势有哪些

    Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念化.从1991年的第一个版本到成为开源项目的2.0版本,它已经走了很长一段路,直到今天,它正在聚集一个庞大且专业的社区,该社区正在不断改进技术. 目前而言一些顶级公司在其技术堆栈中使用Python(例如Instagram) Facebook旗下的一个图片社交网站 Python适合从简单到复杂的各种Web项目.它广泛用于旅行,医疗保健,交通运输,金融等不同领域,用于Web开发和软件测试,脚本

  • Java编程语言特性和优势

    目录 1 前言 2 Java语言特性 2.1 简单性 2.2 面向对象 2.3 架构中立 2.4 可移植 2.5 健壮性 2.6 安全性 2.7 高性能 2.8 解释型 2.9 线程型 2.10 动态型 3 总结 1 前言 Java是近 10 年来计算机软件发展过程中的传奇,其在众多开发者心中的地位可谓“爱不释手”,与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同,Java 随着时间的推移反而变得更加强大. 从首次发布开始,Java 就跃到了 Internet 编程的前沿.后续的每一个版本都

  • java web开发中获取tomcat上properties文件内容的方法

    在java web开发的时候经常会用到读取读取或存放文件,这个文件的默认路径在哪里呢?写死在程序里面显然是可以的,但这样子不利于位于,假如有一天项目从window移植到linux,或者保存文件的路径变了,就需要去源代码中查找,进行替换,这样子不仅效率低,而且程序的耦合度也会过高,这里我用了一个properties文件用于存放文件的保存路径,需要保存或者读取都来自己properties所保存的路径. 1.我存放的propeities文件路径 因为linux和window上面的分盘是不一样的,所以我

  • java微信开发第二步 获取消息和回复消息

    接着上一篇java微信开发API第一步 服务器接入进行学习,下面介绍java微信开发第二步:获取消息和回复消息,具体内容如下 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示. * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0  * 服务器:阿里云 windows server 2008 64bits * 平台要求:servlet

  • Java Web开发入门书籍实例解析(总结一)

    从事Java Web开发这一段时间来,对Java 面向对象的思想和MVC开发模式可以说已经熟悉了.我当前参与的项目使用的框架是Spring.SpringMVC.Hibernate.下面我们小编给大家整理一篇教程帮助大家学习javaweb相关知识,感兴趣的朋友可以参考下. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 1.静态web资源(如html 页面):指w

  • java微信开发API第一步 服务器接入

    微信开发API如何接入服务器,下面就为大家进行介绍 一.说明 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示. * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0  * 服务器:阿里云 windows server 2008 64bits * 平台要求:servlet使用注解方式,平台要求:j2ee6.0+.jdk6.0+.tom

  • Java Web开发防止多用户重复登录的完美解决方案

    目前web项目中,很多情况都是可以让同一个账户信息在不同的登录入口登录这次,这样子就不那么美好了. 推荐阅读: Java 多用户登录限制的实现方法 现在有两种解决方案: 1.将用户的登录信息用一个标志位的字段保存起来,每次登录成功就标记1,注销登录就标记为0,当标记为1的时候不允许别人登录. 2.将用户的登录信息保存在application内置作用域内, 然后利用session监听器监听每一个登录用户的登录情况. 很显然,第一种方式 每次登录 都需要操作数据库,多了一些不必要的性能开销,而且在登

  • Java Web开发之访问路径问题分析

    本文实例讲述了Java Web开发之访问路径问题.分享给大家供大家参考.具体如下: Web应用是由大量的文件组成的,系统等运行主要是靠文件之间的相互调用来完成,调用就是根据文件的位置来确定的.如果你在访问某个文件的时候,系统报下面这样的错误,如果你的文件名没有写错,就是路径出错了. 为了说明路径问题,我们假设有以下的文档结构: 这是JBuilder2006下的一个截图,应用的名字是filepathweb,有两个文件夹,aa和bb,其中aa下有a_a.jsp和a_b.jsp两个文件,bb下有b_a

  • java微信开发之上传下载多媒体文件

    回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务器下载文件,可以参考:http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件 上传下载多媒体文件的方法还是写到WeixinUtil.java中. 代码如下: import java.io.BufferedOutputStream; import java.io.BufferedReader; impo

随机推荐

其他