写点什么

架构师训练营 - 作业 - 第九周

用户头像
Max2012
关注
发布于: 2020 年 11 月 22 日

1、请简述 JVM 垃圾回收原理

答:JVM 启动后,会自动启动后台 GC 守护线程,用于自动的内存回收。

经典的垃圾回收算法主要有 3 种:

  • 标记-清除算法:容易产生内存碎片

  • 复制算法:内存只能利用一半

  • 标记整理算法(标记压缩算法):就是 标记-复制-清除

  • 分代算法:就是将内存分为多个区,根据特性,采用以上 3 种算法

经典的垃圾回收运行有 3 种方式

  • 串行:单个线程执行垃圾回收,回收时用户线程处于等待状态

  • 并行:多个线程执行垃圾回收,回收时用户线程处于等待状态

  • 并发:用户线程和垃圾回收线程同时执行(不一定是并行,可能也会交替执行)

经典的垃圾回收器(生产中如果启动分配的堆大小<=4G,它们是非常成熟的。目前所在单位仍多用此配置)



允许的配合


G1 垃圾回收器(针对大内存的垃圾回收器)

G1 是新的垃圾回收器。它仍是分代的垃圾回收器。只不过,为了减少大内存在垃圾回收时的停顿,将内存分为 2048 个 Region,每个 Region 仍有 E、S、O 角色,然后新增了一个 umongous 的类型。


  • 对于 E Region 的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者 Survivor 空间。

  • O Region,G1 收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。这就意味着,在正常的处理过程中,G1 完成了堆的压缩(至少是部分堆的压缩),这样也就不会有 cms 内存碎片问题的存在了

  • H Region,是新增有一种特殊的区域。 如果一个对象占用的空间超过了分区容量 50%以上,G1 收集器就认为这是一个巨型对象。这些巨型对象,默认直接会被分配在年老代,但是如果它是一个短期存在的巨型对象,就会对垃圾收集器造成负面影响。G1 划分了一个 Humongous 区解决这个问题。H Region 用来专门存放巨型对象。如果一个 H 区装不下一个巨型对象,那么 G1 会寻找连续的 H 分区来存储。为了能找到连续的 H 区,有时候不得不启动 Full GC。



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

答:

面对主要的挑战

  • 对现有网站业务造成的冲击

  • 高并发下的应用和数据库负载

  • 突然增加的网络及服务器带宽

  • 直接下单

应对的架构方案和思路

  • 独立部署秒杀模块,与现有应用进行隔离

  • 秒杀设计的商品页面静态化

  • 将静态资源前置缓存到 CDN

  • 动态生成随机下单页面 URL

用户头像

Max2012

关注

还未添加个人签名 2018.12.13 加入

还未添加个人简介

评论

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