码迷,mamicode.com
首页 > 编程语言 > 详细

java垃圾回收和堆内存布局

时间:2015-08-21 10:48:57      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

      java虚拟机是通过垃圾回收的方式进行内存回收的,C/C++可以通过代码控制内存释放,防止内存泄露,设置不同的垃圾回收方式和参数都会影响垃圾回收的效果,而这对系统的稳定性及单机的支撑能力方面。

     jvm指令集里面没有提供垃圾回收的释放操作,所以不能直接释放内存,而要专门的垃圾回收器来完成垃圾回收的工作。

  不同的垃圾回收器产品有不同的回收策略,先来看Oracle Hotspot JVM中内存的对布局,如图3.2

技术分享

从上图可以看出,有三大区域Young/Tenured/Perm,也就是我们经常说的新生代/老年代/持久代。

 

  一般来说,新的对象被分配到新生代(Young)的Eden区,也有可能被直接分配到老年代(Perm),在进行新生代垃圾回收的时候,Eden区存活的对象被复制到空的Survior区,而下次新生代垃圾回收的时候,Eden区存活的对象和这个Survivor区中存活的对象被复制到另外一个Survivor区,并且清空当前的Survivor区。经过多次的新生代的垃圾回收,还存活的对象被移到老年代,而老年代也会根据一定时间进行呢垃圾回收。

 

在Hotspot中,针对新生代提供的GC方式:

串行GC:Serial Copying

并行GC:ParNew

并行回收GC:Parallel Scavenge

 

针对老年代有下面的GC方式:

串行GC:Serial MSC

并行MS GC:Parallel MSC

并行 GC:Compacting GC - Parallel Compacting

并发GC - CMS

 

在Sun的Java6 update14中,引入了Garbage First(G1)回收器,G1的目标是取代CMS。

 

java垃圾回收和堆内存布局

标签:

原文地址:http://www.cnblogs.com/zhuyoulong/p/4747125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!