我给你讲讲垃圾回收机制吧。
Java解释器在为一个实例对象分配完存储空间后,便开始记录该实例对象所占用的内存空间的使用,直至使用完毕便将其回收。 在Java的运行过程中,一个垃圾回收器会不定时的被唤醒来检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收器的启用不由程序员控制,无规律可循。
不同Java虚拟机有不同的垃圾回收机制,一般有两种比较常用:复制式回收机制和“自省式”回收机制。
复制式回收机制:这种策略的执行模式是现将正在运行的程序暂停,然后把正在被使用的所有对象复制一份到另一块堆内存中,那些 不再被使用的对象所占的内存空间被释放。此方式需要的内存空间是所需维护的两倍,而且当程序只产生了少量甚至没有垃圾时,就会导致效率低下。
自省式回收机制:检测所有正在使用的对象,并为他们标注,完成这项工作后再将所有不再被使用的对象所占据的内存空间一次释放掉。尽管此种方式速度很慢,但在只有少量的垃圾或者没有垃圾时,就极具优势。
这两种方式颇具互补性,所以在一些JVM中结合的运用。如果程序中的对象长期的使用,JVM就换至“自省式”,而当产生大量垃圾或所占的内存不连续情况严重时,又会换至“复制式”。
所以你不需要担心虚拟机内存耗尽之前启动Java的垃圾回收机制。
Java的垃圾回收时是否占用内存?占用多少?这个肯定是占用内存的,看第一种复制式回收机制。,内存占用是所需维护的两倍。 |