1984年1月,AppleComputer公司一举创造了一种成为个人生产力要害因素的全新的计算观念:台式计算机,完全改变此前的计算情况。1995年5月,当SunMicrosystems公司把Java发放到Internet之上时,又再一次引起世界的震动。
Java虽然名字没有太多的意义,但有两点却事关重大。第一,Sun的这一简单的基于对象的开放系统新语言,能使软件开发者利用WorldWideWeb或当前ISV们正在开发的任何前端软件,设计可在Internet上分发的应用软件;第二,它是一种虚拟计算机(技术上叫做JavaVirtualMachine),最终将使一切基于Java的应用软件无处不在???在任何地方运行,不管是什么硬件和用什么操作系统。
为什么叫Java?
Sun公司副总裁JamesGosling于1990年首次提出Java的设计,今天他指挥着Sun的全部Java开发工作的技术队伍。Java语言原来被JamesGosling叫做Oak(橡树)。他起这个名字的灵感出自他在SunMicrosystems公司办公室窗外的一棵大橡树。
后来,Java开发小组发现,Oak是Sun的一种编程语言的名字,于是只得另起新名。开发小组经过几个小时的冥思苦想后发现,要给一种编程语言起一个好的名字是太难了。
最后,有一天在去当地咖啡馆的路上,忽然生出了这个妙想???Java。
其实,Java是印度尼西亚共和国的一个最重要的岛屿,中文译名叫爪哇,位于苏门答腊岛之东与巴厘岛之西,自1696年以来便盛产咖啡。迄今,Java咖啡仍极富盛名。
Java革命
JavaVirtualMachine或者Java应用软件,可不作修改且无需重新编译就可在任何平台上运行,包括智能峰窝电话、膝上型机、Windows3.1、Win95、NT、OS/2或Unix工作站及服务器、以至运行MVS的AS/400或IBMS/390。而且它的运行可以跨越任何数量的网络及Inter-net协议,利用自定名(You-Name-It)数据库网关,并遵从包括CORBA及NetworkOLE在内的任何一种分布式对象标准。
无疑,这是革命性的。而更具革命性的是Sun公开Ja-va的决策,尤其是把JavaVirtualMachine对一切人公开。这意味着,任何软件厂商或单个的开发人员,包括开发工具厂商、语言编译器开发者、RDBMS厂商、中间件厂商、客户机/服务器应用厂商、以至躲在阴暗角落里的“黑客”,都能利用JavaVirtualMachine的字节代码语言,创造出具Internet能力的、可随处运行的应用软件和服务。
所以,就象革命性的Mac硬件及其OS展现了企业中以台式机为中心的客户机/服务器计算的亲用户的时代一样,现在这种新的Java技术正在开辟一条蓬勃发展的、企业内外以网络为中心的客户机/服务器计算的亲开发者的道路。
Java革命将引出一个以授予个人权利为标志的软件世界。Java展现了让操作系统像窗玻璃一样透明的前景。软件、信息技术与网上的内容将依其质量与服务来评判,而不由其创建者的独家拥有(也可说“垄断”)所左右。
Java群体天天都在扩大,它既包括一些世界最大的ISV,也包括公司CIO、信息技术人员、系统分析人员、C/S开发人员、编程人员、多媒体设计者、市场行销人员、教育工作者、经理、影视生产者甚至业余爱好者等广泛的用户。
从传统上看,这样一些人在一起有效地工作是不多见的。当我们谈到开放系统时,我们往往是就已发表的API及规格,或者源码的可得性,或者硬件、联网及操作系统而言的,没有一个人是从人的开放的意义上来谈的。Java完成了开放系统的闭合链。它开发了人力资源,而反过来又开辟了共同工作的道路。
正因为如此,Sun的Java正以令人难于置信的速度赢得在企业计算世界中的地位。
让企业在烤箱用的OS上运行吗?
原来的Java小组从事消费电子设备的软件设计。他们很快发现,诸如C及C++等语言是不合适的,因为它们对特定的计算机芯片都必须进行编译。当一种新的芯片出来后,大部分软件都要重新编译,才能充分发挥新芯片的特性。一旦编译好后,要用新的软件库时C及C++程序又不轻易修改。当修改库时,这些程序又必须重新编译。
消费设备软件必须要用新的芯片,因为制造商受到元件成本的制约。假如计算机芯片的价格太高,它们就会马上用新的更便宜的来替换。即使一点点价格的变化,当销售成百万台设备时差别就很大了。
用于消费电子设备的软件还一定要非常可靠,要比大多数计算机软件可靠得多。假如消费产品出现故障,制造商往往就得替换整个机器。
基于Java的“InternetPC”
很少有象InternetPC这样的争论成为业界的热门话题的了。InternetPC由IBM、Oracle和Sun首先倡导,而众多较小的公司也在付诸行动。
其中心思想是,这种InternetPC将是不到500美元的设备,人们可用来从Internet卸载他们需要的程序,而无需本机存储程序和文件(大多数InternetPC的设计均不含硬盘)。对治理人员来说,InternetPC可望大为减少治理、维护费用和时间,消除一轮又一轮费钱的升级,而装入免费或者几乎免费的软件。
在Sun的InternetPC设想中,Java的运行如同一个小操作系统???可以称为JavaOS,类似于内核的前端软件。这种操作系统代码将能在各种微处理器上的和从手持式PDA到最小内存???大概4MB的低档PC机等设备上运行。
假如Java能在让编程人员编写非常紧凑的代码方面获得成功的话,那么,即使今天大多数用户面临有限的带宽,也可能使用户相当快地卸载和运行Java小程序。
今年1月,Sun在Demo’96交易展上预展了一台InternetPC样机,包括监视器在内,尺寸约为5×9×2英寸。Sun公司官员承认,该机价格将超过500美元,主要因为它带一种工作站监视器。
低于500美元设备的想法会是什么样子,请看看Ora-cle的NetworkComputer(NC)。基本机型将包含一只廉价RISC微处理器、一个基于ROM的操作系统、4~8MBRAM、一个PCCard扩展槽、一个以太网接头、一个键盘和一只鼠标。由于所提出的系统不带监视器,用户势必要插到PC监视器或电视机上。
Oracle的NC定于3月出样机,预计夏末限量交付。O-racle打算设计一种便携机和一种更贵的多媒体机。公司将给其它制造商发放这些设计的许可证。
虽然Sun、Oracle和IBM(以其InterPersonalCom-puter或IPC)大受注重,而少数小公司本月(3月)就可望交付Net机。例如:英国剑桥的AcornComputerGroup、德州澳斯汀的SunRiverDataSystems及渥太华的TransPhone。今年年底,密执安州伯明翰的WebBook公司打算提交一种专为Java设计的Web接入设备。该设备将用圣地亚哥的PatriotScientific公司的ShBoomRISC芯片作它的Java运行引擎。象Java一样,ShBoom采用一种面向堆栈的体系结构,Patriot官员声称,它将有比运行其它处理器更快的优点。
Java的保证
Java是一种有一大套保证的语言,当一起获得时,便成为一种对程序来说确实先进的操作系统。这些保证的大多数在别的语言中也采用了,但没有哪种语言或操作系统一起提供全部的保证。
这些保证包括:
1.Java代码是可移植的,而且对当代几乎所有的操作系统无需修改便能运行。
2.Java给程序员提供真正的多线程以及同步化方法。
3.Java提供与平台无关的用户接口。
4.Java具有内置联网功能。
5.所有Java对象都知道它们怎样打印输出。
6.Java编译器强制进行所有的出错和意外处理。
7.自动进行内存清零。
8.按小程序编写的程序可自动在网上分发。
9.Java小程序将在任何平台上的轻型客户机Web浏览器中无缝运行。
Java优于OLE吗?
Sun并非是唯一一家想到分布式对象的公司。Mi-crosoft在推动其ObjectLinkingandEmbedding(OLE)规格成为软件组件的事实上的标准方面,已获得了很大的成功。而且,将随WindowsNT的下一个版本(NT4.0)交付网络可用的OCX(即OLE控制),在许多方面都与Java对象相似。两者均支持一种重要的面向对象特性???继续。要让网络对象发挥它们的潜能,这种继续父对象功能性的能力是至关重要的。
但是,即使Java小程序与网络可用的OCX在许多方面相似,却也存在一些极为重要的差别。
首先,Java小程序是与平台无关的。一个Java小程序只要写一次就能在运行JavaVirtualMachine的任何PC机上运行。Java小程序与平台无关,而OCX却或多或少受限于Windows工作站。
其次,Java小程序在安全的Java环境下执行。相比之下,执行一个从成百万个Internet节点中的某个节点来的电子数据表OCX,难以保证它们实际运行的不是一个病毒的荒原,而使它们的硬盘驱动器不能工作。Java就不一样,它不答应对内存或硬盘的非授权访问,从而大大减小了一个恶意程序造成的潜在的危险。
最后,OCX与Java小程序之间的一个重要的差别在于,一个OCX只去一个方向:服务器到客户机,而Java小程序可以去两个方向,在客户机与服务器之间不管方向。例如,一个希望在几台服务器上查找一张数据库表的客户机,可以动态地向每台工作的服务器送一个小程序。另外,这些小程序不同于传统的客户机/服务器应用程序,不必要预先安装。
JavaVirtualMachine:一种软CPU
大概,Java环境最重要的组件就是JamesGosling定名的JavaVirtualMachine了。这种VM比起典型的BASIC或其它高级语言运行期解释器强多了。VM是仿照一种小巧高效的CPU设计的。它采用Java编译的字节代码,而且只要是机器语言它都运行。VM的更低层把这种伪机器代码转换为实际的硬件调用(不管它运行的机器上有无OS驻留都照办不误)。
JavaVirtulaMachine支持大约248个字节代码。每个字节代码执行一种基本的CPU运算,如把一个整数加到寄存器,把两个寄存器中的数相加,对子程序的转移,存贮结果,寄存器加1或减1,不一而足。其实,VM是一个堆栈结构且有本地和全局变量的算术逻辑单元(ALU)。
这种堆栈体系结构是这样工作的:要把两个数相加,VM首先把它们放入堆栈,然后加它们。在完成加法后,VM把结构留在栈内供过程的下一步用。假如你想到HP计算器的逻辑的话,你就接近于理解VM的逻辑了。
本地VM变量用于暂存和调用子程序。全局变量则用于跟踪,例如,根据Java字节代码程序的实际机器代码在内存何处执行,当前的对象是什么,相关的数据存放在内存何处,以及其它的全局信息。
它不应让人惊奇,有些芯片制造商(包括SunMi-crosystems和PatriotScientific在内)已经把Java字节代码作为基本指令集做成了一类新的CPU。它们可以用于简单的手持式设备(蜂窝电话、传呼机等),以及Internet专用设备。利用把字节代码操作对象烧到硅芯片上,所以Java能以相当快的速度运行。