• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

Java 理论与实践: 良好的内务处理实践

发布: 2008-6-13 14:36 | 作者: 不详 | 来源: 领测软件测试网编辑整理 | 查看: 6次 | 进入领测软件测试网论坛讨论

领测软件测试网

UD F gn*uo&c)G 软件测试技术第一门户/u|V2r j(R0F*Z

维护一个所有权层次结构有助于不至于失去控制,其中每个资源拥有它获得的资源并负责释放它们。这个规则的结果是,每个不能由垃圾收集单独收集的资源(即这样的资源,它直接或间接拥有不能由垃圾收集释放的资源)必须提供某种生命周期支持,比如 close() 方法。

J0Fy(S{B9A-Y&SN(^ 软件测试技术第一门户DPz#Y$A_

终结器软件测试技术第一门户[Y;~%X[X

/O"cO}_2T如果说平台库提供终结器来清除打开的文件句柄,这大大降低了忘记显式地关闭这些句柄的风险,为什么不更多地使用终结器呢?原因有很多,最重要的一个原因是,终结器很难正确编写(并且很容易编写错)。终结器不仅难以编写正确,终结的定时也是不确定的,并且不能保证终结器最终会运行。并且终结还为可终结对象的实例化和垃圾收集带来了开销。不要依赖于终结器作为释放资源的主要方式。

[/d5][/v| A*V_7ee 软件测试技术第一门户`'`TVa+yaMT

软件测试技术第一门户c_yw} L
 

-CJ\h!w#H p+A+t 软件测试技术第一门户5l me+d*N9ZAw-v

结束语软件测试技术第一门户7pzBEo8v

J$n }z*hi0_9\+C*a0G垃圾收集为我们做了大量可怕的资源清除工作,但是有些资源仍然需要显式的释放,比如文件句柄、套接字句柄、线程、数据库连接和信号量许可证。当资源的生命周期被绑定到特定调用帧的生命周期时,我们通常可以使用 finally 块来释放该资源,但是长期存活的资源需要一种策略来确保它们最终被释放。对于任何一个这样的对象,即它直接或间接拥有一个需要显式释放的对象,您必须提供生命周期方法 —— 比如 close()release()destroy() 等 —— 来确保可靠的清除。

*{7m%xp;y

k%ajjd,L0P8`参考资料 软件测试技术第一门户D"hZU&Yu1D,vt \$a

%r*|;|2~.d#z9J学习软件测试技术第一门户,j1L&I+X0? O$?U
软件测试技术第一门户"XA"r6LT.C

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
    oeR3j8D }V9M
    Y0w](I;zR
  • Concurrent Programming in Java(Doug Lea, Addison-Wesley, 1999):Doug Lea 的大部头作品中的第 3.4.1.3 节讨论了使用信号量来绑定集合的过程。
    Y"D9VjEE%mC
    _dw"Cv7W2\,h
  • “用弱引用堵住内存泄漏”(Brian Goetz, developerWorks, 2005 年 11 月):Brian 讨论了弱引用如何使得表达对象生命周期很容易。
    :L-`e+UE软件测试技术第一门户6B,@H@"pQ\
  • “Finalization, Threads, and the Java Memory Model”(Sun Developer Network, Hans Boehm):了解终结器有多难对付。
    (^:z8Y]8ZX u
    +\'ne9KOZ3_7K
  • Java 理论与实践:Brian Goetz 的完整系列。
    JI Zp:b'cM,f"F
    %zs_'`4h:q
  • Java 技术专区:数百篇关于 Java 编程各方面的文章。
    bT B| P;j+Ua,ZG
    7K2x^ly*U j%N-z#N
软件测试技术第一门户VQa.X|(d

获得产品和技术软件测试技术第一门户W U;[i G m;l.~ P

/i @;?g a6R!P r3f
  • Alice's Restaurant(Warner Brothers, 1969):从电影中了解 Arlo Guthrie 的整个经典民歌 “Alice's Restaurant Massacre”。软件测试技术第一门户:Lj'R `+`n