第 9 周 - 课后练习
请简述 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缓存
控制令牌池发放令牌数量,持有令牌者才有权完成后续操作,否则返回秒杀结束
评论