- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java与C++垃圾回收机制剖析.pdf
REGIONINFO 数字地方
Java与c++垃圾回收机制剖析
◆潘春花
摘要:作为面向对象程序设计语言的两大阵营,c++和Java语言,他们有着非常相似的设计思
路,但是 由于设计 目标的不同,二者在垃圾回收机制的设计上有很大的差异,本文就二者垃圾回收机
制的设计 目标,垃圾 回收过程以及与垃圾回收紧密相关的析构函数和6na1ize()方法做了对比总结,为
广大编程人 员解决初识时的困惑。
关键词:垃圾回收 ;Java~言;c++语 言
一 、 引言 操作符delete时,将调用相应 的析构函数 ,如果程序员忘
记调用delete运算符 ,就永远不会调用析构函数 ,这样就
目前,随着面向对象编程思想的成熟 ,面向对象的编程
出现了内存泄漏的现象,对象得不到清理 ,而且这种缺
语言已占据了当前市场的主流。而c++语言和java语言作为
陷也无法跟踪 。因为这个原因,c++的标准库 中设计 了一
面向对象程序语言的两大主力被广大编程技术人员的普遍使
种智能指针 ,虽然有局限性 ,但它可 以解决 内存泄漏 的
用,这两种语言的相似之处当然是面向对象的种种共性 比如:
问题,智能指针的标准库的定义格式::std::auto—ptr,
封装性 ,继承性 ,多态性等等。但是 ,就内存的回收利用也
将指针包装为类 ,然后重写反引用 (dereference)操作
就是常说的垃圾回收,二者处理方式是有区别的。而且有一
符 (operator一 )和成员选择操作符 (operator一),
个潜在的编程陷阱,往往有些c+十程序员刚开始会误把iava语
来模仿指针的行为。其工作原理是 :使用new运算符来构
言中的finalize()方法当作c++中的析构函数。本文就有他们二
造一个对象并分配 内存空间,通过 自动调用析构函数来
者的异同之处做出剖析。
清理这段内存 。
相反 ,Java不允许建立本地对象 ,须使用new建立对
二、C++~l:ljava中的垃圾回收机制
象,在Java中,也没有删除对象的 (delete)运算符。因为垃
c++程序语言设计的思想是 :程序员要动态地管理内存 圾收集功能会 自动删除无用对象 占用的内存空间。Java没有
资源 ,以对象的形式使用指针 ,程序员必须完成对 内存的 析构函数 ,主要是因为有垃圾收集装置,析构函数不能被垃
分配 、使用和撤销 ,语言 自身不会提供帮助。这样设计的 圾收集装置完全代替,因此,有一种解决方案就是 ,如果想
目的是使其不依赖于 自动垃圾 回收,因为垃圾回收将有一 进行除撤销内存之外 的清理工作 ,就只能调用java的某个方
个严重 的空间和时间开销 ,更有可能带来 回收系统实现的 法 ,这相当于使用析构函数 ,但不方便 。
复杂性和可移植性 。此外 ,C++的一个设计 目标是做许多底 比如,把C++堆 比作房间,其中的一个个对象都独 自占
层T作,而垃圾回收将使其不适合做这些工作。但垃圾回
文档评论(0)