利来w66-利来w66app

官网首页 > 信息资讯 > 公司动态 >
最新案例
点击这里给我发消息
建站咨询热线:
公司动态

初步了解JVM第三篇(堆和GC回收算法)

来源:   日期:2019-12-27 14:10
上以便是堆内存的大三部分:伊甸区、养老区、元空间。上图是逻辑上的结构,可是在物理上只需重生区和养老区,并且咱们需求区别重生代和养老代用的是jvm的内存,可是元......

 

上以便是堆内存的大三部分:伊甸区、养老区、元空间。上图是逻辑上的结构,可是在物理上只需重生区和养老区,并且咱们需求区别重生代和养老代用的是jvm的内存,可是元空间用的是体系内存。假如看得有点懵,没关系,先来咱们来一个一个介绍,首要榜首部分重生区。

重生区

重生区便是类的诞生、生长、消亡的区域。一个类在这儿发作、然后运用,最终被废物收回器收回,完毕了的生命的进程释放出内存。那么咱们来简略说一下,一个类被new出来之后从开端到消亡的一个进程:

养老区

在重生区中,咱们现已描绘了一个类从开端到消亡或许进入养老区的进程,要么便是被kill了,要么便是进入了养老区。进入养老区之后就可以舒舒服服的摸鱼了吗?你想得太简略了,接下来看看,养老区又有怎么样的一番奋斗呢:

堆的内存大小分配:

 注:

这个份额咱们必定要记住,非常重要,这是在gc时选取何种算法的一个依据之一,重生代跟老时代是1:2,而重生代中的三个分区平分别是8:1:1。

看完了堆内存的结构,接下来咱们就要讲讲gc废物收回算法了。在上面咱们描绘了一个目标从开端到完毕的进程,中心会发作gc收回,其间:

这儿过个眼熟,下面咱们在gc废物收回算法的时分会讲到。

废物收回算法

在进行废物收回的时分,jvm需求依据不同的堆内存和结构去选取合适的算法来进步废物收回的功率,而废物收回算法首要有:

1)引证计数算法

原理:给目标中每一个目标分配一个引证计数器,每逢有当地引证该目标时,引证计数器的值加一,当引证失效时,引证计数器的值减一,不论什么时分,只需引证计数器的值等于0了,阐明该目标不可能再被运用了。

长处:

缺陷:

在jvm中一般不选用这种方法完成,所以就不展开来讲了。

2)仿制算法 重生代运用

在重生代中的gc,用的首要算法便是仿制算法,并且发作gc的进程中from区和to区会发作一次交流。在堆的内存分配图中jvm把年青代分为了三部分:1个eden区和2个survivor区。默许份额为8:1:1,一般情况下,新创建的目标都会被分配到eden区,当eden区进行了gc还存留下来的就会被移到survivor区。目标在survivor区每通过一轮gc存留下来年纪就会加1。直到它存活到了必定岁数的是时分就会被移到养老区。因为重生区中的绝大部分目标都是暂时目标,不会存活太久,所以通过每一轮的gc之后存活下来的对像都不多,所以重生区所用的gc算法便是仿制算法。

仿制算法原理:

首要先给我们介绍一个名词叫做根调集: