分代回收机制

私下记录一下面试遗忘的问题;

全称:垃圾分代回收机制。JVM内存(运行时数据区)划分了5个区域,分别是:

1.:存放一个个对应方法的栈帧

2.:储存的是容器和对象

3.程序计数器(寄存器):当前线程所执行的字节码的行号指示器

4.本地方法栈:为虚拟机使用到的本地方法服务

5.方法区:储存类信息,常量,静态常量以及编译器编译后的代码等

而垃圾分代回收机制针对的是堆内存。

Java中的美中数据类型都是确定的,所有的内存都是由Java自己分配,也就是说内存的管理和回收也是java自己进行的。在Java中一带产生内存问题程序员是无法处理的。所以理论上正常情况下Java的堆内存是足够使用的,当堆内存使用的负荷量超过一定的限度(一般情况下时70%)时,会启动垃圾回收器(Garbage Collector——GC)进行堆内存的回收释放。

分代是指堆内存又分新生代(Young Generation)和老年代(Old Generation),新生代又分为伊甸区(eden)和幸存区(surivivor),幸存区由from space与to space两块相等的内存区域组成。eden:from:to = 8:1:1。

对象在刚创建的时候是存在伊甸区的;如果在伊甸区经过一次回收后依然存在,那么会将它挪到幸存区去,在幸存区经历的多次回收后这个对象依然存在,则会将其挪到老年代。在回收的时候会先回收新生代,如果新生代回收之后内存足够使用则不扫描老年代,否则也会扫描老年代。老年代的扫描频率低于新生代。

发生在新生代的回收:Minor GC

发生在老年代的回收:Major GC

对象创建后会先存放在新生代伊甸区,经过一次回收后移入新生代幸存区;在经过多次(一般为15次,可调整)回收后,移入老年代;如果老年代内存不足触发Major回收后该依然无法放开该对象(对象的保存),则会报OutOMemryError。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值