⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000000.htm

📁 水木清华BBS
💻 HTM
📖 第 1 页 / 共 2 页
字号:
备结构中立性(architecture&nbsp;neutral)的目标文件格&nbsp;<BR>式。编译后的程序码可以在提供Java&nbsp;runtime系统&nbsp;<BR>的多种不同处理器上面执行。&nbsp;<BR>&nbsp;<BR>这不仅对网络应用很有帮助,而且也很适合单一&nbsp;<BR>系统软件流通。在目前的个人电脑市场上,应用&nbsp;<BR>程序发展者必须为他们的程式分别编写IBM&nbsp;PC&nbsp;<BR>和Apple&nbsp;Macintosh相容版本。现在,PC市场正&nbsp;<BR>(透过Windows/NT)分散成许多CPU结构,而&nbsp;<BR>Apple则从68000转向PowerPC,这些事实使得我&nbsp;<BR>们几乎不可能设计出能在所有平台上执行的软&nbsp;<BR>体。Java允许同一版本的应用程序在所有平台执&nbsp;<BR>行。&nbsp;<BR>&nbsp;<BR>Java编译器是借由产出与某一电脑结构无关的&nbsp;<BR>字节代码指令,以达到上述功能。它们能轻易地&nbsp;<BR>在任何机器上解释,并且动态地转换成原生模式&nbsp;<BR>的机器码。&nbsp;<BR>&nbsp;<BR>『阿基米得是一家小公司。他们从设计PC软件起&nbsp;<BR>家,因为那是最大的市场。经过一段时日之后,&nbsp;<BR>他们成长至规模够大的公司,因此有能力为&nbsp;<BR>Macintosh平台开发软件,不过那确实是一项很大&nbsp;<BR>的工程,而且投资报酬并非真的很好。他们无力&nbsp;<BR>负担将软件移植到PowerPC&nbsp;Macintosh或MIPS&nbsp;NT&nbsp;<BR>机器所涉及的人力与成本。当第一波潮流来临&nbsp;<BR>时,他们未能捉住机会,而竞争者即趁虚而&nbsp;<BR>入。』&nbsp;<BR>&nbsp;<BR>可移植性&nbsp;<BR>&nbsp;<BR>结构中立性是确保程序可移植的最重要部份,不&nbsp;<BR>过除此之外还有很多条件必须配合。和C与C++&nbsp;<BR>不同的是,Java规范中并无任何『结构相依性』&nbsp;<BR>的陈述存在。它指定基本数据类型的大小,以及&nbsp;<BR>其算术运算元之执行行为。例如,&quot;int&quot;&nbsp;代表一&nbsp;<BR>个有符号的二进制补码32比特整数,而&quot;float&quot;&nbsp;<BR>代表一个32比特IEEE&nbsp;754浮点数。这些选择在&nbsp;<BR>今天的环境很适用,因为几乎所有CPU都具备这&nbsp;<BR>些特性。&nbsp;<BR>&nbsp;<BR>程序库属于系统的一部份,它定义了一些可移植&nbsp;<BR>的程序接口。例如,它包括一个抽象的Windows类&nbsp;<BR>,并且提供了类在Unix、Windows和&nbsp;<BR>Macintosh平台上的实现。&nbsp;<BR>&nbsp;<BR>Java系统本身具备相当好的移植性。编译器以Java&nbsp;<BR>写成,而runtime程序使用ANSI&nbsp;C,并有一个实&nbsp;<BR>质上与POSIX相容的移植疆界(portability&nbsp;<BR>boundary)。&quot;&nbsp;<BR>&nbsp;<BR>解释&nbsp;<BR>&nbsp;<BR>Java解释器(interpreter)可以直接在任何已移植解&nbsp;<BR>释器的机器上解释、执行Java字节代码,不需存储。&nbsp;<BR>再者,由于其链结比较倾向于逐步增量与轻量过程,&nbsp;<BR>因此发展程序更快、更精密。&nbsp;<BR>&nbsp;<BR>由于编译期间的信息属于字节代码资料流的一部&nbsp;<BR>份,因此可以在运行期间携带更多的信息。这正是&nbsp;<BR>链结器类型检查的基础,它也让程序更容易执行除错。&nbsp;<BR>&nbsp;<BR>『阿基米得设计师花很多时间等候程序编译和链&nbsp;<BR>结。他们也花很多时间追踪许多无法感测到的错&nbsp;<BR>误,因为有些更改过的原始档案未能完成编译程&nbsp;<BR>序&nbsp;(虽然他们使用了make公用程序)&nbsp;而导致版本&nbsp;<BR>不一致。同时还要追踪一些在程序中许多声明不&nbsp;<BR>一致的程序。于是,他们的软件发展日程又延诱&nbsp;<BR>几个月。』&nbsp;<BR>&nbsp;<BR>高效能&nbsp;<BR>&nbsp;<BR>虽然解释过的字节代码性能已相当不错,不过有&nbsp;<BR>些情形下还是要求程序达到更高执行效能。&nbsp;<BR>字节代码可以动态地(runtime)为执行应用程序的&nbsp;<BR>特定CPU解释成机器码。这对于习惯使用一般编&nbsp;<BR>译器与动态载入器(loader)的设计者而言,有点类&nbsp;<BR>似将最终的机器码产生器放到动态载入器之内。&nbsp;<BR>&nbsp;<BR>字节代码格式在设计上即顾及机器码的产生,因&nbsp;<BR>此实际的机器码产生程序相当简单。产出的机器&nbsp;<BR>码是有效的,编译器自动分配寄存器,而&nbsp;<BR>在产出字节代码时也会进行一些优化。&nbsp;<BR>&nbsp;<BR>我们以解释码在一台Sun&nbsp;Microsystem&nbsp;SPARC&nbsp;&nbsp;<BR>Station&nbsp;10上执行时,达到每秒三十万个方法调用&nbsp;<BR>(method&nbsp;calls)速率。字节代码转换&nbsp;<BR>至机器码的速度性能,几乎和原生&nbsp;<BR>模式的C或C++没有两样。&nbsp;<BR>&nbsp;<BR>『当阿基米得公司刚成立时,他们&nbsp;<BR>用Smalltalk设计原型程序。这协助该公司获得投&nbsp;<BR>资者赞助,不过那并没有真正的帮助他们生产产&nbsp;<BR>品:为了让他们的模拟程序跑得够快并符合精简&nbsp;<BR>系统要求,他们只好用C重新设计。』&nbsp;<BR>&nbsp;<BR>多线程&nbsp;<BR>&nbsp;<BR>在真实世界中,许多事情同时发生在我们身边。&nbsp;<BR>多线程(multithreading)是一种应用程序设计&nbsp;<BR>法。不幸的是,要设计一个一次同时处理许多事&nbsp;<BR>件的程序,比设计传统单一线程C与C++程序来&nbsp;<BR>得复杂许多。&nbsp;<BR>&nbsp;<BR>Java拥有一组复杂的同步化基本单元,它们&nbsp;<BR>是以广泛使用的C.A.R.&nbsp;Hoare监视器与条件变量图为&nbsp;<BR>基础。将这些概念溶合到语言之后,它们即变得&nbsp;<BR>很容易使用且更为健壮。这项溶合方式大部份来自&nbsp;<BR>Xerox的Cedar/Mesa系统。&nbsp;<BR>&nbsp;<BR>多线程的其他效益包括更好的交互式回应能力&nbsp;<BR>与实时执行行为。然而这会受到底层平台的限&nbsp;<BR>制:独立执行的Java运行环境有着很好的实时执行行&nbsp;<BR>为,而若在其他系统例如Unix、Windows、&nbsp;<BR>Macintosh或Windows&nbsp;NT等之上执行则由于底层&nbsp;<BR>平台的原因实时反应性将会受到影响。&nbsp;<BR>&nbsp;<BR>『阿基米得的模拟程序一次同时执行许多项实&nbsp;<BR>验:拉动绳子、转动轮子和摇杠杆,同时还追踪&nbsp;<BR>使用者输入。由于他们必须将这些模拟全部设计&nbsp;<BR>在一个单一线程的程序格式内,因此所有同时发&nbsp;<BR>生的动作&nbsp;(不论彼此之问是否有关系)&nbsp;必须用人&nbsp;<BR>工方式予以混合。使用一个事件回路可以让情况&nbsp;<BR>更清楚一些,不过那仍旧是一团混乱,系统变得&nbsp;<BR>很脆弱而难以理解。他们从整个网络撷取数据,&nbsp;<BR>不过最初他们只能一次抓一个区块,这种串行的&nbsp;<BR>网络通讯非常缓慢。当他们转移到多线程模式&nbsp;<BR>之后,网络通讯问题即迎刃而解。』&nbsp;<BR>&nbsp;<BR>动态&nbsp;<BR>&nbsp;<BR>从许多方面而言,Java是一种比C或C++更具动态&nbsp;<BR>特性的语言。它在设计上强调为进化中的运算环&nbsp;<BR>境提供支援。&nbsp;<BR>&nbsp;<BR>例如,C++在生产环境中的主要问题之一在于该&nbsp;<BR>程序码在一般设计上引起的负作用。如果甲公司&nbsp;<BR>设计一个对象类程序库,而乙公司采购后它并&nbsp;<BR>放到自己的产品中使用,然后如甲公司更改其程&nbsp;<BR>式库并提供新的版本,那么乙公司将几乎可以确&nbsp;<BR>定必须重新编译和重新流通他们的新软件。当最&nbsp;<BR>终用户分别向甲乙两家公司购买软件&nbsp;(例如甲&nbsp;<BR>是作业系统厂商,而乙是应用程序厂商),那么&nbsp;<BR>问题就产生了。&nbsp;<BR>&nbsp;<BR>例如,如果甲公司为其程序库供应一种升级版&nbsp;<BR>本,那么乙公司的所有软件都将必须修改。虽然&nbsp;<BR>C++可以避免此一问题,不过那极为困难,而且&nbsp;<BR>它也意味着不能直接使用该语言的任何面向对象功&nbsp;<BR>能。&nbsp;<BR>&nbsp;<BR>『阿基米得采用3DPC公司提供的面向对象图形程&nbsp;<BR>式库建立他们的产品。3DPC后来推出新版本的&nbsp;<BR>图形程序库,并且有数家电脑制造商将它搭配在&nbsp;<BR>新机器上出货。采购这些新机器的阿基米得客户&nbsp;<BR>很失望地发现他们的旧软件不能继续使用。&nbsp;(在&nbsp;<BR>真实世界中,这种情形只发生在Unix系统上。在&nbsp;<BR>PC领域里,3DPC将永远不会推出这样的程序&nbsp;<BR>库,因为他们更改和使用C++面向对象功能的能&nbsp;<BR>力受到极大的限制。&nbsp;)』&nbsp;<BR>&nbsp;<BR>Java是在稍后的阶段为模块与模块之间建立这些&nbsp;<BR>连接,因此完全避免了这些问题,并能更直接地&nbsp;<BR>运用面向对象设计体系。程序库可以自由地增加&nbsp;<BR>新方法和实例(instance)变量,而不会对它们的用户产&nbsp;<BR>生任何效应。&nbsp;<BR>&nbsp;<BR>Java能了解由Objective&nbsp;C引用过来的接口概念。&nbsp;<BR>简单的说,接口就是规范一组与对象相对应的方&nbsp;<BR>法,但对象如何实现这些方法则留待解决。一个&nbsp;<BR>类实现一个接口是要提供这个接口所包含的所有&nbsp;<BR>方法的实现。以此相反,派生子类则从父类继承&nbsp;<BR>了一组方法以及它们的实现。一个Java类可以实行&nbsp;<BR>多个接口,但只能从一个父类继承。接口告诉连接&nbsp;<BR>对象它可以做什么而非怎么做,使得它在代码上更&nbsp;<BR>具有灵活性和可复用性。&nbsp;<BR>&nbsp;<BR>对象类有一种运行(runtime)表示法:它有一种类称&nbsp;<BR>为Class,其内容包括runtime&nbsp;class定义。在C或&nbsp;<BR>C++程序中,如果你有一个指针指向一个对&nbsp;<BR>向,但你不知道该对象的类型为何,那么你将没&nbsp;<BR>有办法找出它。然而,在Java中要根据runtime类&nbsp;<BR>型信息寻找是很直截了当的。因为,在compile-&nbsp;<BR>time和run-time时都会检查数据类型转换,所以&nbsp;<BR>你在Java中可以信任这种转换。另一方面,C与&nbsp;<BR>C++的编译器则只是相信你已做了正确的处理。&nbsp;<BR>&nbsp;<BR>此外,它也可能从一个包含名称的字串查找一个&nbsp;<BR>对象类别定义。这意味着你可以演算一个数据类&nbsp;<BR>型名称,然后轻易地以动态方式链结到执行系&nbsp;<BR>统。&nbsp;<BR>&nbsp;<BR>『阿基米得为扩充营收源,希望让他们的产品能&nbsp;<BR>利用新的 入式模块来扩充系统。这种扩充以前&nbsp;<BR>在PC上是可能做到的,只是很少实现。他们必&nbsp;<BR>须增加一些新程序设计员,因为那些工作很复&nbsp;<BR>杂,而且也增加许多除错问题。』&nbsp;<BR>&nbsp;<BR>总结&nbsp;<BR>&nbsp;<BR>Java语言提供一种强有力的工具支援程序设计员。&nbsp;<BR>Java让程序设计变得更容易,因为它属于面向对&nbsp;<BR>象语言,而且提供了自动的内存垃圾收集功&nbsp;<BR>能。再者,由于Java码具备结构中立性,因此其&nbsp;<BR>应用程序成为非同质性运算环境&nbsp;(例如Internet)&nbsp;<BR>的理想方案。&nbsp;<BR>&nbsp;<BR>----------------------------------------------------------------------------&nbsp;<BR>&nbsp;<BR>[*]本篇文章原刊载于&quot;升阳月刊,1996年2月号,pp.&nbsp;19-24&quot;,美国升阳电脑公司台湾&nbsp;<BR>分公司发行。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--取自&nbsp;oceaninfo.ife.ntou.edu.tw&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改&nbsp;蓝宝石&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蓝宝石静静地在黑暗中泛着微光,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;越发让人感到它莫测的神秘...&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -