2017-03-25
垃圾回收(Garbage Collection),在Java中具体指的是对不可用对象进行回收的过程。
“对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民” —-既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。” —- 《深入理解Java虚拟机》
由此可见,C++开发人员虽然拥有对象的绝对控制权,但同时也需要在对象回收上投入极大的精力,经验不足的开发人员容易在这方面犯下一些严重的错误。
而Java引入了自动内存管理机制,即开发人员不再需要为每一个new操作去写配对的delete/free代码,对象的回收以及内存的管理由JVM中的垃圾回收机制承包。由此带来了两个好处,一是不容易出现内存泄漏和内存溢出问题,二是开发人员可以把更多的注意力集中的业务逻辑上,提高了开发效率。到此,一切看起来都很美好。
“不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作” —- 《深入理解Java虚拟机》
深入了解GC究竟是怎么工作的,这有助于你快速精确地定位问题,从而更好地解决它。另外,了解GC能够帮助你改掉一些不好的编程习惯(比如不假思索地new出过多不必要的对象),写出性能更优的Java程序。如果你曾想过正确地使用GC算法、根据实际情况设定对应的JVM参数,那意味着你对自己所开发应用的特点已经有所把握。