星空网 > 软件开发 > Java

java垃圾回收和堆内存布局

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

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

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

java垃圾回收和堆内存布局

从上图可以看出,有三大区域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垃圾回收和堆内存布局

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流