Java的跨平台特性是利是弊?

来源:百度文库 编辑:神马文学网 时间:2024/04/19 11:39:13
(本文作者岑永洪来自中科院软件所。您现在即可参加“我眼中的Java”有奖征文活动,详情请看:http://news.csdn.net/news/newstopic/22/22661.shtml)
Java语言最大的一个特点就是他的跨平台特性,也就是平时广告语中说得最多的“write once run anywhere”。跨平台最明显的一个优点就是,你写的程序地球人都能运行,这对程序员来说就是减少了工作量,对于公司来说就是减少了投入。但是,天底下没有免费的午餐,跨平台是需要有代价的,最明显的一个就是我们的代码将会被编译为所谓的“字节码”,这些代码在运行时由虚拟机进行解释执行,正是因为这种解释执行的方式导致了Java程序的执行速度一直不如其他的C和C++程序。
虽然,跨平台特性是如此优秀,但是很多时候,我们是否真正考虑过我们是否需要这种特性呢,或者这种特性对我们来说是利大还是弊大呢。
在国外,版权是一个很严重的问题,因此,在国外虽然Windows系统占有比较大的市场,但是在大学,在政府部门,在程序员当中,大量使用的是类Unix和Linux的操作系统,只要对Unix操作系统稍有了解,就会知道Unix系统发展到今天,已经出现了好几个不同的发行版本,这些版本虽然没有大的区别,但是还是存在着或多或少的不兼容,因此,一个程序如果需要在不同的平台间运行,那么移植将是必不可少的。因此,对于国外的桌面系统环境,Java程序的跨平台性显然比他的性能因素更重要。但是,反观国内,占据市场主导的都是Windows系统,而程序员所开发的程序也基本上是运行于该平台下,很少需要考虑程序移植的问题。因此,一个程序是否能跨平台运行,对于我们来说不如国外强烈,所以,从我们的现实情况出发,性能比跨平台显然更为重要。但是,从长远来说,如果我们希望我们自己写的程序能够冲出亚洲,走向世界,那么跨平台性显然也是一种很有利的特性。
除了桌面应用以外,Java程序还主要运行于服务器端和嵌入式终端,对于服务器端,我觉得没必要多加评论,因为与桌面应用的PC不同,服务器端应用所依赖的硬件平台尚未呈现一个一家独大的情况,因此跨平台性是非常重要的,而且现有的应用也表明J2EE平台已经成为了事实的标准,因此,不管他合适与否,我们也只能继续使用。
而对于嵌入式终端,特别是智能手机,我觉得是一个很值得讨论的部分。嵌入式市场在最近几年表现出非常迅猛的发展势头。在终端方面,现在市场上存在着大量的终端生产商,而根据过去几年的市场份额分析,各大生产商的份额虽然一直在改变,但是总体趋势仍是保持着的一个各方均衡的情况;对应于多个生产商,在操作系统和应用系统方面也是呈现出一个群雄割据的局面,在操作系统方面,主要是Symbian,Linux,WinCE,Palm;而在应用系统方面则包括了J2ME,Brew及其他与操作系统相应的系统。在这种情况下,如果应用是特定于某一平台的话,那么不管是对生产商,开发商或最终用户都是一件不利的事情,为此,一个能跨平台运行的程序将是嵌入式应用中最受欢迎和被接受的。因此,在嵌入式方面,Java的跨平台性显得非常重要。虽然跨平台性触进了J2ME平台在手机领域的发展,但也正是因为这个跨平台性使得运行在J2ME之上的程序一直未如理想。
J2ME通过CLDC和MIDP来定义运行于手机之上的Java虚拟机的特性,这两个规范定义的都是最低要求,而为了能够增加J2ME在不同手机上的移植,这两个规范所定义的配置门槛都非常的低,低的门槛虽然一方面能扩大市场,但是另一方面也制约了上层应用的开发,这表现在性能和应用模式上。
游戏是手机应用中一个非常热门的方面,但是由于她的性能和表现与下层的硬件直接相关,所以,如果我们使用J2ME所提供的API来开发游戏的话,那么我们只能假定我们所开发的游戏所能使用的资源就是规范中所规定的,这无疑会对我们的创意和实现带来影响。而从市场上现有的运行于J2ME之上的手机游戏,我们也不难看到,这些游戏无论从品质和层次上都有待提高。
一般的桌面软件,都是通过一个页面来获取用户的多个输入,但是由于手机并不像PC那样配有在控件之间进行切换的“Tab”键或者鼠标,因此,当需要向用户获取多个输入时,一般情况下,我们都需要通过多个页面来完成,这显得非常冗余而且低效。从这里,我们不难看出点选设备的存在与否,对于我们的应用模式,存在非常大的影响。但是,这在J2ME规范中并未对此加以区分。
跨平台是一个好事情,但是有时候我们需要做出一些折中,因为,一个技术是否能够存活和发展不仅看他是否优秀,很多时候还需要看他是否能够占领市场,因此为了市场而牺牲一部分的特性,我觉得也是合适的。