快速业务通道

Java的语言特性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
要高出许多,有 些同样功能的程序的效率甚至超过了C++和C语言编写的程序。

Java语言在最开始应用的时候是没有解释层的,所有需要编译的代码都直接转换成机器的 原始代码。这样做的后果就是获得了最佳的性能,但是程序臃肿异常。从JIT技术开始,Java 的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态 编译”的技术,也就是说虚拟机实时监测和分析程序的运行行为,同时选择性地对程序所需 要的部分进行编译和优化。所有这些技术都改善了代码的运行速度,但是又不会让程序的体 积变得失常。

程序的轻便性事实上是软件编写很难达到的一个目标,Java虽然成功地实现了“一次编译 ,到处运行”,但是由于平台和平台之间的差异,所编写的程序在转换代码的时候难免会出 现微小的、不可察觉的错误和意外。有些程序员对此非常头疼,他们嘲笑Java的程序不是“ 一次编译,到处运行”,而是“一次编译,到处调试”。

平台无关性让Java在服务器端软件领域非常成功。很多服务器端软件都使用Java或相关技 术建立。

自动垃圾回收(Garbage Collection)

C++语言被用户诟病的原因之一就是大多数C++编译器不支持垃圾收集机制。通常使用C++ 编程的时候,编程师于程式中起始物件时,会在主机内存堆栈上分配一块内存与位址,当不 需要此物件时,进行解构或者删除的时候再释放分配的内存位址。如果对象是在堆栈上分配 的,而程序员又忘记进行删除,那么就会造成内存泄漏(Memory Leak)。长此以往,程序运行 的时候可能会生成很多不清除的垃圾,浪费了不必要的内存空间。更糟糕的是,如果同一内 存地址被删除两次的话,程序会变得不稳定,甚至崩溃。因此有经验的C++程序员都会在删除 之后将指针重置为0,然后在删除之前先判断指针是否为0。

Java语言则不同,上述的情况被自动垃圾收集功能自动处理。对象的建立和放置都是在内 存堆上面进行的。程序或者其他的对象可以锁定一块栈地址来进行其他对象的引用。当一个 对象没有任何引用的时候,Java的自动垃圾收集机制就发挥作用,自动删除这个对象所占用 的空间,释放内存以避免内存泄漏。但是内存泄漏并不是就此避免了,当程序员疏忽大意地 忘记解除一个对象不应该有的引用的时候,内存泄漏仍然不可避免,不过发生的几率要比不 启用垃圾收集机制的C++程序少很多。但是总体来讲,自动垃圾收集机制要安全和简单许多。

不同厂商、不同版本的JVM中的内存垃圾回收机制并不完全一样,通常越新版本的内存回 收机制越快,IBM、BEA、SUN等等开发JVM的公司都曾宣称过自己制造出了世界上最快的JVM, JVM性能的世界纪录也在不断的被打破并提高。

IBM有一篇有关Java内存回收机制比不启用垃圾收集机制的C++内存处理快数倍的技术文章 ,可在如下网址找到:

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

而著名的Java技术书籍《Java编程思想》(《Thinking in Java》)也有一段论述Java内存 及性能达到甚至超过C++的章节:

http://www.sdau.edu.cn/support/thinkinjava/chapter/appe.htm

Java的语言特性(3)

时间:2011-04-23

但是应该注意到,C++中也可以使用“智能指针”(Smart Pointer)或者使用C++托管扩 展编译器的方法来实现自动化内存释放,智能指针可以在标准类库中找到,而C++托管扩展被 微软的Visual C++ 7.0及以上版本所支持。智能指针的优点是不需引入缓慢的垃圾收集机制 ,而且可以不考虑线程安全的问题,但是缺点是如果不善使用智能指针的话,性能有可能不 如垃圾收集机制,而且不断地分配和释放内存可能造成内存碎片,需要手动对堆进行压缩。 除此之外,由于智能指针是一个基于模板的功能

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号