当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

<b>对象解除时的窘境:由谁负责解除?</b>[Java编程]

赞助商链接



  本文“<b>对象解除时的窘境:由谁负责解除?</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

每个对象都要求资源才能“生存”,此中最令人注目的资源是内存.假如不再需求利用一个对象,就必须将其排除,以便释放这些资源,以便其他对象利用.假如要办理的是非常简单的问题,若何排除对象这个问题并不显得很突出:我们成立对象,在需求的时刻调用它,然后将其排除大概“破坏”.但在另一方面,我们平常碰到的问题常常要比这复杂得多.
举个例子来说,假定我们要计划一套系统,用它管理一个机场的空中交通(一样的模子也大概适于管理一个仓库的货柜、大概一套影带出租系统、大概宠物店的宠物房.这初看仿佛非常简单:构造一个集实用来包容飞机,然后成立一架新飞机,将其置入调集.对进入空中交通管束区的全部飞机都如此处理.至于排除,在一架飞机脱离这个区域的时刻把它简单地删去便可.
但事情并没有这么简单,大概还需求另一套系统来记录与飞机有关的数据.当然,和掌握器的主要功效差别,这些数据的重要性大概一开始并不显暴露来.比方,这条记录反映的大概是脱离机场的全部小飞机的飞翔筹划.所以我们得到了由小飞机构成的另一个调集.一旦成立了一个飞机对象,假如它是一架小飞机,那么也必须把它置入这个调集.然后在系统闲暇期间,需对这个调集合的对象举行一些后台处理.
问题目前显得更复杂了:若何才能知道什么时间删除对象呢?用完对象后,系统的其他某些部份大概仍旧要施展作用.一样的问题也会在其他大量场所呈现,并且在程序计划系统中(如C++),在用完一个对象之后必须明确地将其删除,所以问题会变得非常复杂(注释⑥).

⑥:注意这一点只对内存堆里成立的对象成立(用new号令成立的).但在另一方面,对这儿描写的问题以及其他全部常见的编程问题来说,都要求对象在内存堆里成立.

在Java中,垃圾汇集器在计划时已考虑到了内存的释放问题(固然这并不包含排除一个对象触及到的其他方面).垃圾汇集器“知道”一个对象在什么时刻不再利用,然后会自动释放那个对象占据的内存空间.采取这种方法,别的加上全部对象都从单个根类Object担当的事实,并且由于我们只能在内存堆中以一种方法成立对象,所以Java的编程要比C++的编程简单得多.我们只需求作出少量的决意,便可降服原先存在的大量障碍.

1. 垃圾汇集器对效率及机动性的影响
既然这是如此好的一种手段,为什么在C++里没有得到充分的施展呢?我们当然要为这种编程的便利性付出一定的代价,代价就是运行期的开销.正如早先提到的那样,在C++中,我们可在仓库中成立对象.在这种情形下,对象会得以自动排除(但不具有在运行期间随心所欲成立对象的机动性).在仓库中成立对象是为对象分配存储空间最有效的一种方法,也是释放那些空间最有效的一种方法.在内存堆(Heap)中成立对象大概要付出高贵得多的代价.假如老是从同一个底子类担当,并使全部函数调用都具有“同质多形”特点,那么也不可避免地需求付出一定的代价.但垃圾汇集器是一种特别的问题,因为我们永久不能肯定它什么时刻启动大概要花多长的时间.这意味着在Java程序履行期间,存在着一种不联贯的因素.所以在某些特别的场所,我们必须避免用它——比方在一个程序的履行必须保持安定、联贯的时刻(普通把它们叫作“及时程序”,固然并非全部及时编程问题都要这方面的要求——注释⑦).

⑦:按照本书一些技术性读者的反馈,有一个现成的及时Java系统(www.newmonics.com)确切可以保证垃圾汇集器的效能.

C++语言的计划者曾经向C程序员发出恳求(并且做得非常成功),不要但愿在可以利用C的任何地方,向语言里加入大概对C++的速度或利用造成影响的任何特点.这个目的到达了,但代价就是C++的编程不可避免地复杂起来.Java比C++简单,但付出的代价是效率以及一定程度的机动性.但对大大都程序计划问题来说,Java无疑都应是我们的首选.


  以上是“<b>对象解除时的窘境:由谁负责解除?</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .