【第九周】课后作业

用户头像
云龙
关注
发布于: 2020 年 11 月 29 日



  • 请简述 JVM 垃圾回收原理。



JUM垃圾回收分两个过程,一个是垃圾对象的识别,一个是垃圾对象占用的内存回收。

  1. 垃圾对象的识别:

JVM 通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。

  1. 内存回收,主要有三种方法:

  2. 清理:

将垃圾对象占据的内存清理掉,其实 JVM 并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。

2.压缩:

从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间。

3.复制:

将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复制到另一个空间中。



  1. 垃圾回收的分代处理:

垃圾回收时会将堆空间分成新生代和老年代两个区域。因为大多数的对象存活时间非常短,分成两个两个区后,长时间存活的放入老年代, 在垃圾回收的时候,先回收新生代的,因为这里的垃圾空间比较多,新生代的不够了,再去回收老年代的。 其实这种分代处理,就是提高垃圾回收的效率,或者是垃圾回收动作的“命中率”。

用户头像

云龙

关注

还未添加个人签名 2018.03.30 加入

还未添加个人简介

评论

发布
暂无评论
【第九周】课后作业