快速业务通道

关于Java的批评 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

关于Java的批评

时间:2011-04-23

Java试图通过新的方式解决软件编写的复杂性。很多人认为Java语言做到了它承诺的一切 。但是Java并不是一门完美的语言。

并不是所有的工程和环境需要企业级别的复杂性,比如一个简单的个人网站或者独自编程 的程式师所写的程式。这些程式师会发现Java的复杂管理对于自己要做的程式来说过于强大 了。

一些人觉得Java在面向物件上面做的没有Ruby和Smalltalk纯粹。但是最新出现的用Java 实现的语言Groovy解决了这些问题。

作为一种已经建立的新技术,Java显然综合了很多语言的特性,比如C++、C语言、Python 等等。一些对于Java的评论认为Java的不变性在动摇。

语言问题

有些程式师不喜欢原始类型(primitive type)和类(class)的分离,尤其是那些曾经使用 过Smalltalk和Ruby的程式师。

Java的代码相对于其他的代码来说过于冗长,这与它的轻便化声明相违背。

Java是一种单层继承的语言。这也导致了程式师在试图使用多重继承时候的不便,而很多 语言都可以使用这个特性。但是Java可以使用接口类,把多重继承可能导致的风险减少到最 小。

Java不支持运算符重载,这是为了防止运算符重载使得代码的功能变的不清晰。但是用 Java实现的语言Groovy可以进行运算符重载。

过去Java对于文本的操作和其他语言,比如Perl和PHP相比差的较多,但Java在1.4版本时 候引入了正则表达式。

准确地说,JAVA不是平台无关的,它本身就是一个平台。

类库问题

使用Swing平台编写的带有GUI(图形用户接口)的程式和其他原始程式非常不同。选用 AWT工具包编写程式的程式师看到的都是原始接口,而且也无法获得先进的GUI编程支援,如 果使用的话,就要提供每个平台上面所需的API,这将是一项庞大的工程。Swing则是完全用 Java语言所写的程式,避免了接口元素重复的问题,只使用所有平台都支持的最基本的绘图 机制。但是很多用户不知道如何在Java风格和Windows风格之间进行转换,结果造成了Java程 式的接口在很多程式中非常特殊。苹果电脑已经提供了优化过的Java运行时程式,包含了Mac OS X的经典Aqua接口风格。

性能问题

由于Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多,所以统 一讨论Java的程式的性能经常是有误导性的。据IBM的资料,在同样的硬件上2001年时的IBM JDK版本的性能是1996年的JDK版本的十倍左右。见IBM东京研究院的资料: http://www.is.titech.ac.jp/ppl2004/proceedings/ishizaki_slides.pdf 而即使是在同一 时期,不同公司的JDK和JRE的性能也不一样,比如SUN、IBM、BEA等公司都有自己开发的JDK 和JRE。

Java语言的一些特性不可避免的有额外的性能代价,例如阵列范围检查、运行时类型检查 等等。Java程式的性能还会因为不同的动态复杂性和垃圾处理机制使用的多少而各有不同。 如果JVM的实现比较优化的话,那么这些功能甚至可以增加内存分配的性能。这和总是使用 STL或者托管C++的程式的情况类似。

尽管如此,仍然有许多人认为Java的性能低。这部分归因于Sun公司最初的JVM实现使用未 优化的解释机制来执行字节码。一些新版本的JVM使用Just-In-Time(JIT)编译器,在加载字 节码的时候将其编译成针对运行环境的本地代码来实现一些本地编译器的优化特性。Just- In-Time机制和本地编译的性能比较仍旧是一个有争议的话题。JIT编译需要很多时间,对于 运行时间不长或者代码很多的大型程式并不适宜。但是不算JIT编译阶段的话,程式的运行性 能在很多JVM下可以和本地编译的程式一争短长,甚至在一些计算比较密集的数值计算领域也 是这样。目前,Java已经使用更先进的HotSpot技术来代替JIT技术,Java的性能有了更进一 步的提升。另外,在使用-server选项运行java程式时,也可以对java进行更深入的优化,比 如在运行时将调用较多的方法内联(inline)到程式中来提高运行速度,这就是所谓的“动态 优化”,而本地编译器是无法做到这一点的;这也是一些java代码比对应用C/C++等语言编写 的本地代码运行的更快的原因之一。微软的.NET平台也使用JIT编译器,所以也有类似问题。 Java的设计目的主要是安全性和可携性,所以对于一些特性,比如对硬件架构和内存位址访 问的直接访问都被去除了。如果需要间接调用这些底层功能的话,就需要使用JNI(Java本地 接口)来调用本地代码,而间接访问意味着频繁调用这些特性时性能损失会很大,微软 的.NET平台也有这样的问题。所以到目前为止,性能敏感的代码,例如驱动程式和3D视频游 戏,还是大多使用本地编译,甚至直接以不直接支援面向物件的C语言或机器码编写。但最近 已经有了许多用纯Java编写的3D游戏,其效果与用C语言编写的不相上下,例如“合金战士” (英文名:Chrome)。这主要是因为新版的Java 3D技术已经能像C++一样调用硬件加速,也就 是使用显卡来加速,无论是C++还是Java语言写的3D游戏都是使用显卡及GPU来处理,从而使 得CPU可以专注于其他方面的工作。

关于Java的性能,可以参看以下文章:

http://www-128.ibm.com/developerworks/cn/java/j-jtp09275.html

http://www.matrix.org.cn/thread.shtml?topicId=16092&forumId=18

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号