java GC

来源:互联网 发布:与大数据有关的项目 编辑:程序博客网 时间:2024/05/03 22:44

java GC将内存划分为三块,第一块为Permanent Generation,第二块为Old Generation,第三块分为New Generation(又称Young Generation)。其中New Generation包含Eden区和两块Survivor区,如图。

其中PermanentGeneration区存放java中的类与类加载器,此外,对以上各区大小也有一定的设置建议,如Young区为整个堆区的1/4,而Survivor区一般为Young区的1/8.

Old区存放的是Young区的Survivor满后触发Minor GC仍存活的对象,当Eden区满后会将对象存至Survivor区,如果Survivor区仍存不下这些对象,将会把这些对象直接存放至Old区,如果Old区也满了,则会触发Full GC回收整个内存.一般采取mark-compact算法进行内存回收。

Young区分Eden区与两个Survivor区,其中所有全创建的对象都存在Eden区,当Eden区满后会触发Minor GC将Eden区仍然存活的对象复制到Survivor区中,另一个Survivor区中存活的对象也复制到这个Survivor区中,并且保证始终有一个Survivor区是空的.一般采用copying算法进行内存回收。

首先Eden区域满后触发Minor GC将Eden区仍然存活的对象复制到Survivor区中,如图(GC前后对比):

原创粉丝点击