极客时间架构师训练营 - week9 - 作业 1
请简述 JVM 垃圾回收原理。
首先需要由 JVM 判断出垃圾,典型的方法包括引用计数法和可达性分析法。引用计数法,即给每个对象添加一个计数器,当有地方引用该对象时计数器加 1,当引用失效时计数器减 1。用对象计数器是否为 0 来判断对象是否可被回收。可达性分析法是通过 GC ROOT 的对象作为搜索起始点,通过引用向下搜索,所走过的路径称为引用链,通过对象是否有到达引用链的路径来判断对象是否可被回收。
在确定了哪些垃圾可以被回收后,JVM 要做的事情就是开始进行垃圾回收。具体方法包括:标记-清除法、标记-复制法、标记-压缩法、分代回收法等。
标记-清除法是在标记完后统一回收所有被标记对象占用的内存空间。此法会产生大量不连续的内存碎片,不利于后续连续内存的分配;
标记-复制法则将可用的内存空间按容量划分为大小相等的两块,每次只使用其中一块。当这一块使用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉;
标记-压缩法则与标记-复制-清除法类似,只是后续的步骤不再是直接清除可以回收的对象,而是将所有存活的对象都向一端移动后,再直接清理掉端边界以外的内存。
分代回收法根据对象存活周期的不同将内存划分为几块,Java 中主要是新生代、年老代。这样就可以根据各个年代的特点,采用合适的收集算法了,如新生代采用了复制算法,而老年代采用了压缩算法。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
主要面临的挑战:
用户都希望能秒杀到特价商品,系统的瞬时访问并发量会很高。不做限制,系统一定会奔溃。
问题:
1.带宽是一定的且前台需要对用户友好;
2.后台严格控制,要保证方案的安全性、可靠性与公平性;
3.响应要快,秒杀系统要尽快上线,不影响目前的系统。
核心的架构方案:
1.另起炉灶,拉出最简化的必要处理后台处理逻辑,组成后台,严格审核代码,避免出现漏洞,被人利用;
2.将页面缓存成 HTML,存到 CDN;
3.CDN 过滤大部分请求,后台再设置多道流量关卡,将访问后台的流量限制到后台所能承受的范围内;
4.进行并发测试演练。
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/ab3ac9a23f32945dd65e1c961】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论