架构师训练营 第 9 周作业
请简述 JVM 垃圾回收原理。
JVM 垃圾回收能够释放不被使用的内存空间,腾出宝贵的内存资源。
JVM 利用可达性算法分析对象。从线程堆栈或方法区的对象引用开始查找,对其引用的对象进行标记,未被引用的即是垃圾回收的对象。
垃圾回收有三种方式:
清理:直接删除垃圾对象;
压缩:拷贝存活的对象到连续空间,其余则是连续的空闲空间;
复制:规定创建对象的专用内存空间,该空间用完则拷贝上面的对象到另外的空间上;
另外,JVM 还将内存进行分代管理,将新创建的内存放在新生代,多次未被回收的对象放在老年代,一般会较频繁地检查新生代对象,因为新创建的对象往往周期短。这样能提高垃圾回收的效率。
垃圾回收器算法主要有:
串行,开单个线程进行垃圾回收,适用于早期单核机器;
并行,多线程垃圾回收,利用了多核 CPU;
并发,不中断系统进行垃圾回收;
G1 回收器,对内存空间进行分块,有针对性的回收和对象创建,提高效率;
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
秒杀系统往往会面对以下挑战和问题:
瞬时高并发带来的带宽、数据库、性能压力
秒杀逻辑的安全可靠,且保证公平
为了应对上述问题,需要一些架构思路:
静态资源加速,可用 CDN 加速网页、图片、资源文件等;
缓存加速,类似 CDN,一般可以是业务数据的缓存;
限流,控制各个环节的并发,比如课程分享的三级阀门:秒杀页面限流、下单页面限流、支付系统限流;
简化流程,砍掉非必要的部分,减少系统压力,避免短板;
安全:前端逻辑支持,防止提前刷单等;
应急预案:作好最坏的情形下的应对策略,有备无患;
评论