新生代与老年代区别

堆内存的划分,怎么划分呢,在堆内存中有一个比较大的划分的,新生代和老年代,在新生代里面又会划分几个区域,EDEN区,s0和s1区,

为什么要做这样的划分,S0和S1大小都是相同的,相等的,目的是什么目的呢,是为了做复制算法的一个交换,复制算法的最大的一个优点是

什么呢,减少碎片化,S0和S1大小是完全相等的,我去画一个非常详细的一个图

1. 首先这是一个堆内存图,默认的新生代和老年代的比例划分是多少,就是1比2,老年代比新生代要大两倍,所以这里我们可以这样画,

按照等份来画,左边一份,右边两份,这个是默认的,你们也可以把新生代和老年代配置成相同的比例,这里我们可以把它叫做新生代,

右边的可以叫做老年代,有人可能就有疑问了,新生代到底干嘛用的,老年代到底是做什么目的的,新生代和老年代的表达含义是什么

意思,刚出生不久的就放在新生代里面,这边为什么会叫做老年代呢,会讲到计数法,计数法到时候会详细说的,引用计数法,这个引用计数法

GC频繁去回收的时候,刚出生不久对象会存在新生代里面去,如果你要是经常被使用,我用引用计数法做一个统计,我发现每次在回收的时候

都在被使用,一旦达到15次以后,你就会从新生代里面晋升到老年代里面,老年代里面主要是存放比较活跃的对象,存放经常被引用的对象,

新生代主要是存放不是经常使用的对象,比如我先做new了一个对象User(),假如他等于user1 = new User(),这个时候的user1是存在

什么地方呢我们放在新生代里面去,这个时候会经历GC的层层考验,你会发现经常被使用,我就会把它放到老年代里面去,垃圾回收机制,

一般是在新生代里面比较频繁,还是在老年代里比较频繁,垃圾回收机制一般在新生代比较频繁,老年代虽然也有,但是很少,

既然你的对象经常被使用,那我需要回收干嘛,你已经经过这么多考验了,老年代回收的次数比较少,如果你那个对象不是经常

被使用的对象,就会存在新生代里面,如果是经常被使用的对象,被GC已经验证过很多次的,会进入到老年代里面去,在新生代里面

又会分一个区,第一个区叫做EDEN区,EDEN区什么意思呢,新生代还有S0区和S1区,S0和S1区要相等的,有的地方把S0叫做from区,

S1叫to区,但是都是一个概念,但是我喜欢叫S0和S1区,

S0区和S1区大小相等的,在讲垃圾回收机制的时候会讲的,一个刚出生对象的话,我会把它放到EDEN区里面,放在eden区的时候,我的GC

进行回收的时候,发现你会经常被使用,这才进入到S0里去,如果我发现你在S0区也会被经常使用的话,这个时候我才会放到老年代里面去,

老年代里面是很少被回收的,除非你内存满的情况下,才进行回收的,这就是我讲的一个老年代和新生代的一个区别

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值