首先gc是一个所谓的精灵函数,主要由JVM负责调用。gc的执行时机之所以大家觉得高深莫测,主要是因为gc的执行机制比较复杂的原因。 首先内存被gc分为四块,成为supervisor1和supervisor2,称为s1和s2好了。还有就是young generation和old generation。声明内存的时候,首先放到s1中。s1满了以后自动将所有的内容复制到s2中,并将所有的新的声明要求放在s1中。 当s1再次填满以后,gc将进行一次 次要垃圾收集。这个时候进行的工作主要是检测所有s1和s2中的变量是否存活, 并将存活的内容丢到young generation中去,s1,s2清空。这时候gc依然“接受”声明请求。当s1,s2再次被填满以后,由于此时young generation中也已经填满内容,将进行一次 次主要垃圾收集,将所有存活的内容进行整理,放在old generation中。继续前述过程。如果四个都填满,那么gc只有进行主要垃圾收集。这应该就是大家平时所说的“垃圾收集”了, 这个收集比较消耗时间。 (责任编辑:包春林)
|