第 9 周命题 JVM 回收 & 秒杀
请简述 JVM 垃圾回收原理。
目前JVM是用可达性分析来完成无用对象的标识,根可达是指有由堆外指向堆内的索引,例如main函数是最主的根,它的成员变量也是根,运行时栈内指向堆的对象就是可达的,否则堆内的对象就是不可达的。可达的对象将标识下来。
堆内存空间分为Eden区,survive区和老年区,新的对象在eden区中诞生,miniGC后把还可达的对象迁移到survive区,eden区清空。几次miniGC后,survive还存在的对象将迁移到老年区,如果在eden区迁移到survive区的对象太大,将直接引发fullGC把对象扔到老年区。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
主要应对的是高并发的问题,数据一致性的问题,DDOS攻击的问题
思路是减少访问的流量和计算。
首先是秒杀前,需要把访问尽量放在本地缓存和cdn中,减少中心数据区的压力
然后秒杀开始时,需要控制进入购买商品的访问量,同一个ip访问的频率,这些nginx都可以做到
商品秒杀时需要做好产品数量的原子性,防止超卖,redis可以满足在分布式环境中的数据原子性
商品买卖过程中使用最终一致性算法,避免长时间的资源占用,可以使用mq来完成业务
再就是秒杀时资源的使用,可以临时把其他应用的响应降级,把资源都放到秒杀上
评论