毕业设计(论文)外文翻译-毛浩明解说.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
毕业设计(论文)外文资料翻译 学院(系): 计算机科学与技术学院 专 业: 网络工程 姓 名: 毛浩明 学 号: 201217030209 外文出处: THINKING IN JAVA 附 件: 1.外文资料翻译译文;2.外文原文。 指导教师评语: 签名: 年 月 日 附件1:外文资料翻译译文 垃圾收集器的工作方式 如果你学下过一种因为在堆里分配对象所以开销过大的编程语言,很自然你可能会假定 Java 在堆里为每一样东西(除了 primitives)分配内存资源的机制开销也会很大。 不过,事实上垃圾收集器能够深刻影响对象的加速创建。一开始听起来有些奇怪——存贮空间的释放会影响存贮空间的分配,但是这的确是一些 JVMs 的工作方式,并且这意味着 Java 为堆对象分配存贮空间几乎和别的语言里为栈分配存贮空间一样地快。 举个例子,你可以认为 C++的堆就如同一个堆放的工场,在这个工场里,每一个对象都立桩为界。对象切实拥有的地皮占有权不久会被废除无效,并且这块地皮必须重新加以利用。在Java的JVM 里,堆的工作方式完全不同;每次为一个新的对象分配存贮空间的时候,它就更像是一个不断向前移动的传送带。这就意味着对象存贮空间的分配速度明显加快。 在这个过程中,“堆指针”简单地向还没被占用的空间领域移动,所以非常像 C++里栈的分配方式。(当然,记录工作会有一点额外的开销,但是完全不同于 C++里那种在堆放工场里为寻找没被利用的存贮空间而付出的开销。) 你或许观察到实际上堆本身并不是一个传送带,如果你真的那样看待堆,你就会启用虚拟内存——在硬盘里不断地装卸,结果是看上去你会拥有比实际情况还要多的内存空间。最终当你创建了足够多的对象后,你会耗尽内存。 Java 的诀窍就在于垃圾搜集器插手于其中,当垃圾收集器收集垃圾的时候,它会压缩所有堆里的对象以便你能够有效的将堆指针移动到离传送带更近的地方从而远离了页面错误。垃圾收集器重新安排了整个过程,这使得分配存贮空间的时候一种高速,无穷闲置的堆模式成为可能。 要想理解 Java 的垃圾收集工作,先了解一下别的语言系统里垃圾收集所使用的方案是有帮助的。一种简单的但却较慢的垃圾收集技术就是引用记数(refrence counting).这种技术意味着每个对象都含有一个引用计数器,每一次一个引用指向那个对象的时候,引用记数就增加一每一次对象引用离开作用域或者被设置为 null的时候,引用记数就减一。因此,应付对象被引用的数量在你的程序的整个生命周期里是一笔较小但却一直持续的开销。圾收集器历遍整组对象,当它发现一个引用记数为零的对象时就会释放那个对象的存贮空间。(不过,只要记数为零,引用记数方案通常会立刻释放对象)。 这种方案的一个缺点是如果对象之间循环着互相引用,那么这些对象的引用记数可能为非零,而垃圾收集器依然把它们当作垃圾收集。定位这种自我引用的对象组需要垃圾收集器付出大量额外的工作。引用记数通常被用来解释一类垃圾收集的工作原理,但是它似乎没被任何一种 JVM 所采纳。 有一种执行更快的垃圾收集方案,这种方案中垃圾收集不是建立在引用记数的基础上。相反,它的思想是是任何没死的对象最终一定会在栈和静态存贮器里找到相应存活的引用。这种链式的查找方式可能历遍几个层次的对象组。因此,如果从栈和静态存贮器里开始并历遍整个引用组,你会找到所有存活的对象。对于你找到的每个单引用,你必须找到它所指向的对象,然后发觉那个对象的所有引用,接着找到那些引用所指向的所有对象,依次类推,直到你历遍整个由栈和静态存贮器里的引用所形成的网。每个你找到的对象必须还存活着。注意,这里不存在分离的自我引用的对象组——他们只是没被查找到,因此被自动当作垃圾。 在上述提到的垃圾收集方案中,JVM 使用了一种自适应的垃圾收集方案,它对查找到活对象采取的措施依赖于它正在使用的方案变体。其中的一个变体就是stop-and-copy。它意味着——基于一些明显的原因——程序首先停止运行(这不是一种在后台实施的垃圾收集方案)。然后,每一个活着的对象从一个堆里被拷贝到另一个堆里,同时被拷贝的活对象和死的对象被当作垃圾遗弃。并且,当对象被拷贝到新的堆里后,他们在那里被一个挨一个塞紧,因此实现了压缩新堆的目的(而且如前所述,这种方式腾出了压缩后多余出来的新

文档评论(0)

4477769 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档