JVM 垃圾回收

用户头像
羽球
关注
发布于: 2020 年 08 月 02 日

目的:

将JVM中堆中不再使用的对象占用的空间释放,回收内存资源。



需要解决的问题:

1.那些对象不再被使用,可以被回收?

从根(栈变量、静态变量)开始标识,如果对象被引用即为存活。再从标记的对象出发,继续进行标记。

2.如何回收,回收方法?

清理:将垃圾对象的空间标记为可用,分配对象空间时,可以使用这部分空间;

压缩:以堆空间起始位置为准,将存活对象依次排列,将剩余的空间变为连续的;

复制:将堆空间分成两部分,先在一个上面分配空间,当但满后,将存活对象移至另一部分;



JVM

1)Web的请求处理过程中,创建的对象生命周期都很短,直接在Eden区分配空间;

2)当Eden区满时,对Eden区进行标记和回收,将存活对象移至From区。Eden和To区为空;

如果From区满会怎么样? 启动第3)步。

3)当Eden区满时,对Eden和From区一同进行标记和回收,将存活的对象移至To区。Eden和From区为空;

如果To区满会怎么样?对象移至老年代。

4)Eden再满时,对Eden和To区一同进行标记和回收,将存活对象移至From区。Eden和To区为空;

5)对象经过多次From和To之间转移,仍然存活,会进入老年代;

6)当老年代满,即To无法移至老年代,进行新+老的全部垃圾回收。



3.回收过程中内存如何管理?

G1垃圾回收内存管理

将Eden、Survivor、Old、Humongons四种类型,分成多个块,已减少回收时的stop时间。



4.用什么样的过程进行回收,即回收算法?

串行回收器:单核CPU,有一个回收线程即可。回收期间应用程序线程要阻塞,即stop the world;

并行回收器:多核CPU,多个线程进行回收,减少stop时间;

并发回收器CMS:分4个阶段,初始标记、并发标记、重新标记(stop)、并发清理;

G1回收器:标记(stop)、并发清理;



用户头像

羽球

关注

还未添加个人签名 2017.10.28 加入

还未添加个人简介

评论

发布
暂无评论
JVM垃圾回收