【架构师训练营 - week9 -1】作业
作业一:
请简述 JVM 垃圾回收原理。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
请简述 JVM 垃圾回收原理
GC分代假说
我们都知道,绝大多数对象都是朝生夕死。对于绝大多数GC算法而言都会遵循基本的分代假设。
它的结构如下所示,即
Young
此区域使用的GC算法为Mark and Copy
,即没被回收的对象会被标记出来然后拷贝到幸存区。
Eden(TLAB 线程私有的分配缓存区,加快分配速度)
Survivor1
Survivor2
在年轻代,会触发Minor GC,年轻代的垃圾回收能回收掉70%--90%的内存。而幸存的对象会进入Survivor区中,并且每次Minor GC触发,不会被回收的对象会在Survivor区中交替复制,直到次数大于15次,这些对象会进入老年代。
Tenured(Old)
在老年代,使用的GC算法是Mark-Sweep-Compact
,即没被回收的对象,会被标记出来,然后为了减少内存碎片,尽量的压缩成一块区域。
在老年代调用的使用的是Major GC区回收
秒杀系统
秒杀的特点就是这样时间极短、 瞬间用户量大。
主要的挑战:
1.并发压力
2.害怕超售
3.恶意请求
设计原则:
1.单一职责。
2.URL动态化。
3.高性能的web服务器Nginx
4.静态化资源
5.进行前端限流和后端限流
6.提前预热数据,把数据存在Redis中
评论