你的位置:首页 > 软件开发 > Java > 源码分析HotSpot GC过程(二):DefNewGeneration的GC过程

源码分析HotSpot GC过程(二):DefNewGeneration的GC过程

发布时间:2015-12-07 20:00:07
由于虚拟机的分代实现,虚拟机不会考虑各个内存代如何实现垃圾回收,具体的工作(对象内存的分配也是一样)由各内存代根据垃圾回收策略自行实现。  DefNewGeneration的使用复制算法进行回收。复制算法的思想是将eden和from区活跃的对象复制到to区,并清空eden区和fr ...

源码分析HotSpot GC过程(二):DefNewGeneration的GC过程

  由于虚拟机的分代实现,虚拟机不会考虑各个内存如何实现垃圾回收,具体的工作(对象内存的分配也是一样)由各内存代根据垃圾回收策略自行实现。

  DefNewGeneration的使用复制算法进行回收。复制算法的思想是将eden和from区活跃的对象复制到to区,并清空eden区和from区,如果to区满了,那么部分对象将会被晋升移动到老年代,随后交换from和to区,即原来的to区存放了存活的对象作为新的from区存在,而from区被清空后当做新的to区而存在,移动次数超过一定阈值的对象也会被移动到老年代。

  此外,在分析DefNewGeneration的垃圾回收之前,可以了解一下,在垃圾回收过程中,对对象的遍历处理定义一个抽象基类OopClosure(对象表),并使用其不同的实现类来完成对对象的不同处理。   第一轮递归标记后,根集对象中C3引用了C5,C5被移动至To区域,Scanned指针指向已处理完的对象,这时C1、C2、C3均已被遍历完毕,现在C5需要被遍历。其中绿色对象代表被移动到To区域的非根集对象。源码分析HotSpot GC过程(二):DefNewGeneration的GC过程  在以上分析的基础之上,我们假设还有一个C12为C8所引用,但是To区域没有足够的空间,那么C12就会晋升到更高的内存代(老年代)

四、DefNewGeneration的引用处理:

  1.处理_discoveredSoftRefs数组中的软引用

 // Soft references {  TraceTime tt("SoftReference", trace_time, false, gclog_or_tty);  process_discovered_reflist(_discoveredSoftRefs, _current_soft_ref_policy, true,                is_alive, keep_alive, complete_gc, task_executor); } update_soft_ref_master_clock();

原标题:源码分析HotSpot GC过程(二):DefNewGeneration的GC过程

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录