关于垃圾回收

来源:互联网 发布:淘宝县级服务站加盟 编辑:程序博客网 时间:2024/05/16 10:32

垃圾回收器(Garbage collectors、GC),我们所需要知道的:

  • GC是软件工程工具。1958年John McCarthy 发明Lisp语言时,为了解决堆的手工管理问题而首创了垃圾回收器。它杜绝了内存泄漏悬挂引用。注:Java与C++的泄漏是两个概念,C++如同遗失了存折(假设不能够挂失),Java如同在家里收藏了一大堆不用的存折(有人有这个怪癖,咋整)。没有GC支持的语言,除非不用或尽量少地、谨慎地使用heap,否则在软件工程看来是垃圾语言,如C++。
  • 有作者指出:在没有垃圾回收的情况下,复杂系统的内存管理问题不可能得到解决,除非程序在设计时就把正确管理内存作为其主要目标。
  • “If Java had true garbage collection, most programs would delete themselves upon execution.” — Robert Sewell。:)

  • 垃圾回收的原理:除非正在读博士,了解直观的引用计数(reference counting)技术,或者stop-and-copy algorithm(SICP)即可。各种垃圾回收原理的文章,直接跳过,看了也白看
  • 一些非内存资源:如打开文件的数量、底层网络通信的套接字资源等等,需要释放。只要资源属于java.lang.AutoCloseable,使用Java7引入的try-with-resources语句。而finalize() 极少被用到,而且在使用它的时候要多加小心,由于我们无法把握对象何时被清除。
  • gc() 和runFinalization(),如同山盟海誓,太当真不好。
  • 尽管有后台运行的GC能够自动管理堆,在程序设计时,还是要尽可能地减少垃圾和减少GC过程中的开销。例如尽可能减少临时对象、少用String的串接运算符、能够使用基本类型就不使用包装类如Integer对象等。

  • 不必太在意内存回收问题
  • 书上给出的链接:Richard Jones 维护的Garbage Collectionpage :http://www.cs.kent.ac.uk/people/staff/rej/gc.html.
    the Garbage Collection page is a comprehensive resource for automatic dynamic memory management a.k.a garbage collection. As well as links to my book on garbage collection and my online, searchable memory management bibliography (over 1,900 entries), it includes links to other garbage collection resources such as software and conference proceedings.

0 0
原创粉丝点击