架构师训练营第九周作业
请简述 JVM 垃圾回收原理
判断对象是否存活
可达性分析
通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的
作为 GC Roots 的对象包括下面几种:
当前虚拟机栈中局部变量表中的引用的对象
方法区中类静态属性引用的对象
方法区中的常量引用的对象
垃圾回收算法
复制算法
将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为了原来的一半。
标记清除算法
首先标记所有需要回收的对象,然后统一回收被标记的对象
标记整理算法
首先标记出所有需要回收的对象,在标记完成后,后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端,边界以外的内存
垃圾回收器
jvm 垃圾回收器把上面的三种算法全部用到了,采用分代收集
新生代:复制算法
老年代:标记清除算法和标记整理算法
设计一个秒杀系统
主要的挑战和问题有哪些?
秒杀系统最大的挑战是服务器如何应对短时间内涌入的高并发流量并保证服务不会中断。
核心的架构方案或者思路有哪些?
截流:采用计数器或者其他方式控制进入后续流程的用户数;
异步:采用队列异步处理用户提交的订单请求,减轻前端服务器的压力;
缓存:通过浏览器缓存、CDN缓存和数据缓存减轻服务器的压力;
资源静态化:尽量提供静态的秒杀页面,减少页面的动态请求,这样就可以通过缓存和CDN减轻服务器端的压力;
参考:
作者:SunnyBear
链接:https://juejin.im/post/6844904148404535309
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
版权声明: 本文为 InfoQ 作者【qihuajun】的原创文章。
原文链接:【http://xie.infoq.cn/article/39e89cfe5e9518d3e3a2ac6ff】。文章转载请联系作者。
评论 (1 条评论)