JAVA 的垃圾回收机制

来源:互联网 发布:tomcat 域名绑定 路由 编辑:程序博客网 时间:2024/05/15 11:17

JAVA 的垃圾回收机制

    如果一些分配出去的内存空间不需要时没有及时回收,就会引起内存泄漏(Memory Leaks),也就是会引起系统运行速度的下降,严重的话甚至会导致整个程序瘫痪。所以回收这些内存空间,以节省宝贵的内存资源就显得尤为重要。    JAVA 提供了一个系统级的线程(JAVA 垃圾收集器线程)来对分配出去的内存进行跟踪,垃圾收集器线程是一种低优先级的线程,当 JAVA 虚拟机处于空闲循环时, 会自动检查分配出去的每一块内存空间,然后自动回收。相比C、C++等其他语言,需要程序员手工回收内存就简单多了。而且程序员并不总是知道内存什么时候该回收释放。JAVA 程序的内存分配和回收都是由 JRE 在后台自动执行的,程序员不能强制垃圾收集器回收一块内存,可以通过调用System.gc()方法来建议执行垃圾收集器,但是什么时候执行、能不能执行都是未知的。    每一个对象都有一个 finalize() 方法,用来回收内存以外的系统资源,每个对象只能调用 finalize() 方法一次。如果 finalize() 方法执行时产生异常,该对象仍可以被垃圾收集器收集。    JAVA 虚拟机具有两个显著的特点: 一是垃圾回收机制很好地提高编程效率,在使用 JAVA 语言编程时,依靠垃圾回收机制可大大缩短时间。二是垃圾回收机制保护程序的完整性,垃圾回收是 JAVA 安全策略的一个重要的部分。在 JAVA 语言中,判断一块内存是否符合垃圾收集器收集的标准要符合两个要求:    一:给对象赋予了 null ,以后再也没有调用过。    二:给对象赋予了新值,即重新分配了对象。

垃圾收集的常用算法:
  1、引用计数法(Reference Counting Collector)
  2、tracing算法(Tracing Collector)
  3、compacting算法(Compacting Collector)
  4、copying算法(Coping Collector)
  5、generation算法(Generational Collector)
  6、adaptive算法(Adaptive Collector)

0 0