程序员需要通过关键字new创建java对象,即可视为java对象申请内存空间,JVM会再堆内存中为每个对象分配空间,当一个java对象失去引用时JVM的垃圾回收机制会自动清除它们,并回收它们所占用的内存空间。
①当应用程序空闲时,即没有应用线程在运行时,GC(Garbage Collector)会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。
②Java堆内存不足时,GC(Garbage Collector)会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。
由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。
|