Java的垃圾回收是怎么回事
webmaster 在 2009-08-24 14:28 提交
Java的一个好处是由虚拟机为你管理所有的内存:这一点有利有弊,虽然你不必承担管理内存的任务,但是你同样不能精确地使用和管理内存。因此 JVM有一个线程观察内存并在需要时回收它们。现在有很多版本的虚拟机,我们主要集中讨论的是Sun 1.3.1版本的JVM(大部分生产中的应用服务器仍然使用它)。
Sun JVM通过维护两个独立generational(世代)空间来管理内存:young generation和old generation,对象在这两个空间中被分配。通过管理young generation,JVM能很好处理大部分存活时间非常短的对象,这些对象在创建后很快就符合垃圾回收条件;young generation运行的非常快并且非常有效率,因为它或者回收不再使用的内存或者使用Copying机制把old对象转移到old generation。它支持三种垃圾回收类型:
Copying(或者scavenge):在generations之间高效率地移动对象;默认为minor回收
Mark-compact:原地回收内存,但明显比Copying慢;默认为major回收
Incremental(或者train):持续回收内存,用来最小化单次回收花费的时间;你必须明确指定"-Xincgc"命令行参数。
Taxonomy upgrade extras: