写点什么

架构训练营第九周作业

用户头像
一期一会
关注
发布于: 2020 年 12 月 20 日

作业一:

第一题


  • 请简述 JVM 垃圾回收原理。


解答:

垃圾回收,就是将 JVM 堆中不在使用的对象清理掉,释放内存资源

算法:

JVM 的垃圾回收,主要依靠可达性分析算法。从线程栈帧中的局部变量,或是方法区的静态变量出发,对这些变量引用到的对象进行标记。然后把第一步标记的对象作为出发点,去标记那些被这些对象引用到的对象。反复重复此过程,直到所有能到达的对象都完成标记。剩下的没有标记的对象就是可回收的垃圾对象了。

回收分类:

  1. 清理

  2. 压缩

  3. 复制


真实使用中,很少使用清理,因为清理垃圾对象得到的空间多是分散的碎片空间,无法容纳新创建的对象。


压缩的方法,会将仍然在用的对象全部“挤”到一起,把剩余空间化零为整,方便创建新对象。

复制的方法,会将堆分成两块,把仍然在用的对象全部放入一块,然后在另一块存放新创建的对象。


分代垃圾回收:

大的层面上,堆被分为两部分,新生代一部分,老年代一部分。新生代又分成了 Eden,From,To 3 个区。

新创建的对象放入 Eden 区,当该区空间不够时,进行新生代垃圾回收(Young GC),把仍然存活的对象放入 From 区。下一次垃圾回收,把仍然存活的对象放入 To 区。来回的在 From 和 To 间移动。当几次在 From,TO 间来回移动之后,如果仍然有对象存活,将这些对象放入老年代。老年代空间会比较大。


如果老年代也满了,也需要做垃圾回收,而新生代同时也做垃圾回收。这时垃圾回收属于完全垃圾回收(Full GC)


JVM 垃圾回收器算法

串行回收器

最早的时候,由于硬件条件(CPU 单核),垃圾回收是一个线程串行进行的,每次进行 GC 时,所有进程都停止响应(Stop the world)。

并发回收器

到了多核时代,垃圾回收也开始使用多个线程并发回收的方式。这样就能大大减少 Stop the world 时间。


并行回收器 CMS

并发回收的时候,仍然会 Stop the world。为了改善响应时间,开始使用并行回收器。回收分为几个阶段:初始标记,并发标记,重标记,并发清理。 初始标记还是会 Stop the world,但时间大大减少;然后进入并发标记过程,这里的并发指垃圾回收标记线程和用户线程并发执行;这样的话带来另一个问题,就是并发标记时,用户线程可能会产生新的垃圾。所以需要下面的重标记过程。该过程也需要 Stop the world;最后时并发清理,这里的并发也是指垃圾清理线程和用户线程并发执行。

因为并发标记,并发清理时用户线程依然可以正常执行,所以整个过程看下来,用户被 Stop the world 阻塞的时间就减少了。


G1 回收器

现在比较主流的回收器。

把内存分为很多小块区域,针对小块区域进行 GC。各个小块也分角色,Eden,Survivor,Old,Humongous 等。

可以设置-XX:MaxGCPauseMillis 参数,指定 Stop the world 时间,回收机制会动态调整策略,满足设置的时间(时间设置需要合理,否则也没有效果)

第二题


  • 设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?

解答:

挑战和问题

秒杀系统会带来平时百倍千倍的并发访问量,而通常企业现有的硬件资源是远远不够支撑这么高的并发访问量的。

需要防止用户跳过页面直接下单。

秒杀活动通常卖的商品都会十分抢手,所以会有用户使用秒杀器、机器人等进行抢购。所以需要相应的预防措施。


架构方案

资源准备

可以临时征用一些备用的、冗余的服务器进行支撑

提高带宽上限来支持秒杀活动

使用 CDN,事先缓存肯定会成为热点的图片等静态资源

隔离

构建新系统,而不是在老系统上改造或扩展。

新系统更容易上手,并且不会把风险带入老系统。


阀门设计

通过多层阀门,一层层的将并发量控制在合理、可接收范围。超过阀门阈值的请求,直接进入万能的“秒杀已经结束”页面,可以大大减少并发压力。

设计优化

静态化:把动态页面变为静态页面

并发控制:仅允许最前面一部分人进入秒杀系统

简化流程:砍掉不必要的分支流程

前端优化:使用 YSLOW 的技术提高页面响应速度

预防秒杀器:URL 带随机 token 参数,秒杀前 2 秒生成,设置访问上限等

作业二:



  • 根据当周学习情况,完成一篇学习总结



解答

请看下面的脑图

JVM垃圾回收


秒杀系统设计


JVM虚拟机架构原理


数据库基本原理


发布于: 2020 年 12 月 20 日阅读数: 68
用户头像

一期一会

关注

还未添加个人签名 2018.01.08 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营第九周作业