写点什么

第 9 周 - 课后练习

用户头像
Dawn
关注
发布于: 2020 年 08 月 05 日



请简述 JVM 垃圾回收原理



  • 哪些对象要回收

从线程栈中的局部变更,或者是方法区中的静态变量出发,将这些变量的引用对像进行标识,然后看这些引用对象是否引用了其它对象,继续进行标识,没有被标识的对象就是垃圾对象。

  • 如何回收

  • 清理

  • 将垃圾对象占用的空间标识为可用空间

  • 压缩

  • 碎片整理,腾出连续可用空间

  • 复制

  • 回收过程中的内存空间如何管理

  • 分区

  • 新生代(回收速度快)

  • Eden区

  • 对象一开始创建放在新生代

  • 大部份新建对象都在Eden

  • 只要扫描Eden区,很大比例的对象是可回收的,保证继续使用,节省时间

  • From区

  • To区

  • 老年代

  • young GC()

  • 三个区域的设计,使得每个Young GC后,Eden区、From或To区两个区域的数据移动到第三个区域,使得Eden区和From或TO其中一区空出来,一个用于继续创新新对象,一个用于下次GC时移迁对象时可连续分配空间

  • Full GC

  • 当young GC From或To区写不了数据时,会触发Full GC,将可用对象写入老年代区域

  • 用什么样的过程回收

  • 串行回收器

  • 早期单CPU

  • 并行回收器

  • 多核CPU

  • 并发回收器(CMS)

  • 应用程序和回收同时进行

  • 会导致疏漏

  • 重标记(stop the world)时间相对较短

  • 并发清理

  • G1回收器(未来主流)

  • 区域类型增加大对象区域,每种分区划分成2000个小的区域

  • 小区域快速回收



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



秒杀活动一般优惠商品数量有限或极少,优惠极大,并且指定在某一时刻开始下单,系统短期承受极高的并发量。

秒杀通常分为抢单环节和后续支付环节,前一个环节,用户参与量巨大,而后一环境通过只有抢到单的人才会参与,压力较小,因此系统压力主要在抢单环节。



方案思路

  • 环境独立部署,不影响其它业务

  • 应对宽带压力,估算峰值流量,确保所有参与者可访问活动初始页

  • 静态资源CDN缓存

  • 控制令牌池发放令牌数量,持有令牌者才有权完成后续操作,否则返回秒杀结束



用户头像

Dawn

关注

还未添加个人签名 2018.07.04 加入

还未添加个人简介

评论

发布
暂无评论
第9周-课后练习