第 9 周作业
请简述 JVM 垃圾回收原理。
回收堆上的数据
利用大部分对象生命周期很短这个特点,使用分代回收算法
分代回收算法
年轻代
分成伊甸区和生存区,生存区有两部分S0区和S1区
对象首先分配在伊甸区
满了后,进行垃圾回收,把存活的放到生存区S0
后续继续在伊甸区分配
再次满,把伊甸区和S0回收都放入S1区,S1和S0互换
一直重复,每次回收都会对相应的对象标记一次年龄,当年龄到达一次次数就把对象放入老年区
老年区
老年区满了后进行垃圾回收,清理老年区的数据
具体的回收算法有
标记-清除
利用可达性算法找出需要回收和不需要回收的,需要回收的对象进行清除操作
复制
利用可达性算法找出需要回收和不需要回收的,不需要回收的对象整体复制到另一个区域
主要用在年轻代的伊甸区和生存区
压缩
利用可达性算法找出需要回收和不需要回收的,需要回收的对象进行清除操作,不需要回收的压缩到一起,方便后继的对象分配
主要用在老年代
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
主要挑战
后端瞬时请求大
服务负载高
DB负载高
网络流量大
核心架构方案或思路
减少请求
秒杀的商品数量是有限制的,所有只有前N个请求是有效的,后续的请求可以直接拒绝不需要流转到后端
限频
异步排队
操作极简
秒杀时只处理下单,其它操作可以前置或是后置,如填写收货地址,可以在秒杀前提示用户先填写收货地址。如付款,可以提示用户可以晚点付款。
缓存
对于静态资源秒杀前是可以准备好具不需要改变的,可以提前缓存起来,减少请求流量
浏览器本地缓存
CDM缓存
服务端本地缓存
服务端分布式缓存
安全性
防止提前秒杀
前端铵钮置灰,没到时间铵钮是不可用
后端判断时间,没到时间不执行后续流程直接报错
隐藏秒杀信息,秒杀开始时才给出秒杀信息
商品信息放入CDN缓存中,秒杀开始前10分钟再更新缓存
评论