写点什么

第九周作业

发布于: 2020 年 12 月 17 日

JVM就会对垃圾对象占⽤的内存进⾏回收,回收主要有三种⽅法。

第⼀种⽅式是清理:将垃圾对象占据的内存清理掉,其实JVM并不会真的将这些垃圾内存进⾏

清理,⽽是将这些垃圾对象占⽤的内存空间标记为空闲,记录在⼀个空闲列表⾥,当应⽤程序

需要创建新对象的时候,就从空闲列表中找⼀段空闲内存分配给这个新对象。

但这样做有⼀个很明显的缺陷,由于垃圾对象是散落在内存空间各处的,所以标记出来的空闲

空间也是不连续的,当应⽤程序创建⼀个数组需要申请⼀段连续的⼤内存空间时,即使堆空间

中有⾜够的空闲空间,也⽆法为应⽤程序分配内存。

第⼆种⽅式是压缩:从堆空间的头部开始,将存活的对象拷⻉放在⼀段连续的内存空间中,那

么其余的空间就是连续的空闲空间。

第三种⽅法是复制:将堆空间分成两部分,只在其中⼀部分创建对象,当这个部分空间⽤完的

时候,将标记过的可⽤对象复制到另⼀个空间中。JVM将这两个空间分别命名为from区域和

to区域。当对象从from区域复制到to区域后,两个区域交换名称引⽤,继续在from区域创建

对象,直到from区域满。



用户头像

还未添加个人签名 2020.09.08 加入

还未添加个人简介

评论

发布
暂无评论
第九周作业