java虚拟机垃圾回收的几个特点

时间:2022-06-17 00:03:16

JVM的几个特点

java语言规范并没有明确的说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做两件基本的事情:发现无用的对象;回收被无用对象占用的内存空间,是该空间可被程序再次使用。

通常,垃圾回收具有如下几个特点:

  • 垃圾回收机制的工作目标是回收无用对象的内存空间,这些空间都是JVM堆内存里的内存空间,垃圾回收只能回收内存资源,对其他物理资源,如数据库连接、磁盘IO等资源则无能为力
  • 为了尽快的让垃圾回收机制回收那些不在使用的对象,可以将该对象的引用变量设置成null,通过这种方式暗示垃圾回收机制可以回收该对象
  • 垃圾回收机制的不可预知性。由于不同的JVM使用了不同的垃圾回收机制和算法,因此它有可能是定时发生的,有可能是CPU空闲时发生的,也有可能和原始的垃圾回收一样,等待内存消耗出现极限时发生,这和垃圾回收机制的选择及具体的设置都有关系 虽然程序员可以通过调用对象的finalize()方法或System.gc()方法来建议系统进行垃圾回收,但是这种调用仅仅是建议,依然不能精确的控制垃圾回收机制的执行
  • 垃圾回收机制的精确性主要体现着两个方面:一是垃圾回收机制能够精确的标记活着的对象;二是垃圾回收机制能够精确地定位对象之间的引用关系。前者是完全回收废弃对象的前提,否则就有可能造成内存泄露,而后者是实现归并和复制等 算法的必要条件,通过这种引用关系,可以保证所有的对象都能被可靠的回收,所有的对象都被重新分配,从而有效的减少内存碎片的产生
  • 现在的JVM有多种不同的垃圾回收实现,每种回收机制引起算法的差异,有的当垃圾回收开始时就停止应用程序的运行,有的当垃圾回收机制允许应用程序线程的运行,还有的同一时间允许垃圾回收多线程运行

当编写java程序时,一个基本原则是:对于不再需要的对象,不要饮用它们。如果保持这些对象的引用,垃圾回收机制暂时不会回收这些对象,则会导致系统可用的内存越来越少;当系统可用的内存越来越少时,垃圾回收执行的频率就越来越高,从而导致系统的性能的下降。