写点什么

架构师训练营第九周命题作业

用户头像
whiter
关注
发布于: 2021 年 01 月 03 日
  • 请简述 JVM 垃圾回收原理。

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


1 JVM 垃圾回收原理

首先通过可达性分析算法来判断对象是否被引用,从根开始进行标记,对于没有引用的垃圾对象进行回收。

回收主要有三种方法:

  1. 清理:将垃圾对象占据的内存空间标记为空闲

  2. 压缩:将存活的对象从堆头开始连续排列

  3. 复制:将堆分为两部分,只在一部分创建对象,当占满时,将存活对象复制到另一个部分中

分代垃圾回收

将堆空间分成新生代和老年代,一般老年代空间大于新生代空间,再进一步将新生代区域分为 Eden 区和两个 From/To 区。新申请的对象会被分配到 Eden 区,当 Eden 区占满时,进行 YoungGC,把 Eden 区和一个 From/To 区中的对象清理标记并复制到另一个 From/To 区,这样可以保证有一个 From/To 区是空的,如此循环。

当有对象不断的在两个 From/To 区之间复制而且仍然保持存活,则该对象会被复制到老年代。

当 Eden 区和 From/To 区的存活对象大于另一个 From/To 区的空间时,进行 FullGC,将所有区域进行回收,节省出空间后,将一部分对象复制到老年代,继续操作 。


垃圾回收器

常见的垃圾回收器有下面几种


串行回收器用于单核 CPU,此时增加 GC 线程没有益处。并行回收器与并发回收器 CMS 都可用于多核 CPU,并行回收器算法简单,stop the world 时间长于并发回收器,但总体资源消耗更低,从整体来看效率高于并发回收器,适用于以计算为主要目的的场景;并发回收器将回收过程的标记和清理分离,将能够并发处理的部分同应用线程并发执行,从而大幅降低的 stop the world 时间,但总体资源消耗升高,适用于 web 应用。

2 秒杀系统


发布于: 2021 年 01 月 03 日阅读数: 14
用户头像

whiter

关注

还未添加个人签名 2020.05.29 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第九周命题作业