写点什么

第九周命题作业

用户头像
cc
关注
发布于: 2021 年 01 月 23 日

1.请简述 JVM 垃圾回收原理。

【定义】:将 JVM 堆中不再使用的对象清理掉,释放的宝贵的内存资源。

【回收过程及原理】:在 jvm 中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年轻代和年老代是存储动态产生的对象。永久带主要是存储的是 java 的类信息,包括解析得到的方法、属性、字段等等。永久带基本 不参与垃圾回收。我们这里讨论的垃圾回收主要是针对年轻代和年老代。

具体如下图。


年轻代又分成 3 个部分,一个 eden 区和 from,to 区。刚开始创建的对象都是放置在 eden 区的。分成这样 3 个部分,主要是为了生命 周期短的对象尽量留在年轻代。当 eden 区申请不到空间的时候,进行 minorGC,把存活的对象拷贝到 from 或者 to。年老代主要存放生命周期比较长的 对象,比如缓存对象。

具体 jvm 内存回收过程描述如下(可以结合上图):

1、新对象创建在 Eden 区完成内存分配。

2、当 Eden 区满了,再创建对象,会因为申请不到空间,触发 minorGC,进行 young(eden+from)区的垃圾回收。

3、当反复 minorGC,Eden 不能被回收的对象被放入到空的 from(Eden 肯定会被清空),当 from 区的空间也满了,会将 from 区里不能被 GC 回收的对象也会被放入这个 to 区,始终保证一个 from 和 to 有一个是空的。

4、如果发现 from 或者 to 满了,则这些对象被 copy 到 old 区,或者并没有满,但是有些对象已经足够老,也被放入 Old 区 。

5、当 Old 区被放满的之后,进行 fullGC。

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

【挑战和问题】

1.高性能:秒杀开始,系统瞬间承受平时数十倍甚至上百倍的流量,直接宕机;核心链路涉及的上下游服务从前台到后都在告警;库存只有一份,所有请求集中读写同一个数据,DB 出现单点。

2.一致性:用户下单后付不了款,显示商品已经被其他人买走了;成功下单买到商品的人数远远超过活动商品数量的上线。

3.高可用:恶意下单,导致库存清零,商家无法正常售卖;黄牛通过秒杀器扫货,商家无法达到营销目的;系统其他与秒杀活动不相关的模块变得异常缓慢,业务影响面扩散。

【架构方案、思路】

静态化: 采用 JS 自动更新技术将动态页面转化为静态页面。

并发控制:防秒杀器 :设置阀门,只放最前面的一部分人进入秒杀系统。

简化流程:砍掉不重要的分支流程,如下单页面的所有数据库查询; 以下单成功作为秒杀成功标志。支付流程只要在 1 天内完成即可。

前端优化 : 采用 YSLOW 原则提升页面响应速度。


用户头像

cc

关注

还未添加个人签名 2018.03.19 加入

还未添加个人简介

评论

发布
暂无评论
第九周命题作业