博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
垃圾收集算法学习
阅读量:5147 次
发布时间:2019-06-13

本文共 873 字,大约阅读时间需要 2 分钟。

 前言:作为学习java虚拟机的基础,垃圾算法必须了解其实现原理。

 1、标记-清除算法 ,最基础的算法,之所以说基础,所有的算法是在它基础上改进,它分为标记和清楚两个部分,首先标记,对所有的可回收对象标记一下,然后回收 。

两个步骤效率都很低。最大的缺点是。清除后产生很多不连续的碎片,如果一个大对象,进入内存,则不能被分配,造成再一次垃圾回收。

 2、复制算法,为了避免这种不连续的碎片,采用了分区。分为三个区,edon, from survivor ,to survivor ,新生的对象一开始全被分配到edon 区 。from suivivor,存活的上次回收后还没达到能进入老年代的对象(有个计数器,一个对象默认被使用15 次进入老年代,当然大对象直接进入老年代),当内存满了,促发垃圾回收,这里的垃圾回收是minor GC,会把edon 区 和from survivor区 的存活的对象全部复制到了to survivor ,当然,回收之后,from suivivor 和to survivor名称就对换了。之所以这样做我个人认为survivor上有个计数器用于记录对象的使用次数一般的默认edon和survivor比例是8:1.edon区加两个survivor区之和为新生代,这种算法保证每次新生代能使用的内存为虚拟机配置的百分之90%。当survivor空间不够时会通过内存担保机制直接进入老年代,并且,当垃圾回收的时候to survivor不够,即 没有达到15 次在新生代的对象和 from survivor 区存活的对象大于to survivor区最大内存,也会被分配到老年代。

3、标记-整理算法 , 把 所有的还在使用的对象标记和全放到一端,然后清除,保证不会出现内存不连续。

   
   

 4、分代收集算法,这个算法是根据对象的存活周期把内存分为几块,一般是新生代,老年代。新生代对象存活率短,用复制算法。老年代用标记-清除,标记-整理算法

转载于:https://www.cnblogs.com/zgghb/p/4213726.html

你可能感兴趣的文章
leetcode-Sort List
查看>>
中文词频统计
查看>>
【Linux】ping命令详解
查看>>
Oracle中包的创建
查看>>
关于PHP会话:session和cookie
查看>>
jQuery on(),live(),trigger()
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
导航,头部,CSS基础
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>