写点什么

架构师训练营第 1 期 - 第 9 周 - 命题作业

用户头像
wgl
关注
发布于: 2020 年 11 月 24 日
架构师训练营第 1 期 - 第 9 周 - 命题作业

(至少完成一个)

  1. 请简述 JVM 垃圾回收原理。

  2. 设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?


  1. 请简述 JVM 垃圾回收原理。

1). JVM 垃圾回收--将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。

2)..JVM 通过一种可达性分析算法进行垃圾对象的识别。

3). 具体过程:

线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记, 所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。

4). 进行完标记以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有 3 种方法 :

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

b. 压缩(整理):从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,其余的空间就是连续的空闲空间。

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

5). JVM 分代垃圾回收

Java 堆分为:新生代(Eden 区,From 区,To 区)和老年代

JVM 分代垃圾回收的频繁程度的顺序由多到少依次是:

新生代(Eden 区 > From 区 > To 区)>老年代

6). JVM 中,具体执行垃圾回收的垃圾回收器有 4 种:

Serial 串行回收器---单线程执行垃圾回收。

Parallel 并行回收器---可以启动多线程执行垃圾回收。在多核 CPU 运行时,效率高于串行回收器。

以上两种在执行回收时,都必须停止用户线程的工作,称为 stop the world. 在用户视角看来,所有的程序都不再执行,整个世界都停止了。


并发回收器 CMS --- 在执行回收的某些阶段,垃圾回收线程和用户线程可以并发运行。

G1 回收器 --- 它将整个堆分为多个子区域,然后在这些子区域上各自进行垃圾回收。在执行过程中,垃圾回收线程与用户线程是并发执行的。


发布于: 2020 年 11 月 24 日阅读数: 25
用户头像

wgl

关注

正走在系统架构设计师路上的程序员。 2017.12.07 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第 9 周 - 命题作业