六、原生代码解决方案
当然,C/C++ 和 Linux的组合同样可获取类似Java平台的大部分特性。熟悉C/C++ 和 Linux开发平台的程序员很多,开发工具丰富。然而,这种选择的缺点是:
1.非隔离性
存在前述的错误指针问题。由于安全和质量问题,不能让第三方开发人员介入产品的内容开发。
2.高昂的开发成本
当硬件更换时,至少针对新的硬件环境必须重新编译所有的代码。而且需要在新环境下重新测试代码。内容模块也必须在所有的硬件条件下一一编译并测试。这显著延长了开发周期。
3.部署和维护成本
若用户通过网络服务器下载补丁和软件升级,需要为每一种硬件类型提供不同的软件版本。管理和跟踪这些版本增加了软件部署维护的成本。修复bug时,要编译和测试所有的硬件,然后部署在服务器上供下载。这又增加了维护成本。
对于Java平台的解决方案来说,也要在软件升级和补丁时进行部署和测试。但是,Java解决方案的部署,仅限于Java平台而不是全部的代码。另外,由于Java开发者社区庞大,新硬件的Java环境可能已经部署完毕(尤其是采用标准硬件的情况)。所有这些因素都会减少部署成本。
至于测试,Java平台拥有标准化的测试套件,可以检测API签名及其行为期望区间,测试虚拟机性能。这些测试就是著名的TCK测试(Technology Compliance Kits)。除了TCK ,Sun公司还有专门的测试包用于Java虚拟机实现的压力测试。这些测试可确保兼容性、健壮性等符合预期指标。
七、原生代码解决方案的成本
对于采用C/C++ 在Linux环境下开发的解决方案来说,C/C++的编译器存在漏洞和差异。例如,浮点运算存在圆整问题。不同的CPU浮点运算结果有些许偏差。这些差异不经常引起重视。当采用TCK测试不同CPU的Java虚拟机实现时,会发现这个问题。如果恰好产品的某项性能参数在不同的CPU下运行而产生变化,这是才会引起注意。这意味着,必须在各种硬件环境下测试软件产品。操作系统也存在类似的问题,任何测试手段都不能保证在目前操作系统下软件在新的操作系统下正确无误地运行。而在Java平台下,由于只需要在平台的级别测试,测试成本可显著低于原生代码解决方案。
结论
综上所述,从技术和商业双重层面上看,把产品部署在JAVA平台上都是合理的选择。当然,武断地说JAVA平台适合于所有的嵌入式系统是不正确的。例外的情况总是有的,但一般来说,JAVA平台在嵌入式开发领域确实有很多优势之处值得重视。