写点什么

架构一期 第九周作业

用户头像
haha
关注
发布于: 2020 年 11 月 22 日
  • 请简述 JVM 垃圾回收原理。

JVM,java 虚拟机,为什么叫虚拟机?他有自己的计数寄存器、内存管理、执行引擎(可执行自己的字节码指令,像一个 cpu 一样);

JVM 垃圾回收就是将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。

JVM 通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。标记完以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有三种方法:

(1)清理:将垃圾对象占据的内存清理掉,其实 JVM 并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象;

(2)压缩:从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间;

(3)复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复杂到另一个空间中。

JVM 分代垃圾回收

JVM 在具体回收的时候,使用的是一种分代垃圾回收策略,分代垃圾回收是指把内存空间分成了两个代:老年代和新生代,对象创建的时候在新生代创建,回收的时候先在新生代回收,如果经过了一段时间后,这个对象还没有被回收掉,说明这个对象的生命周期比较长,就会将它复制到老年代。

新生代又分为三块:Edan 区、From 区、To 区,Eden 区空间满的时候,进行垃圾回收,会将对象拷贝到 From 区,From 区满了,拷贝到 To 区,如果对象来回拷贝多次还没有被回收,这时就会拷贝到老年代区,当老年代满了,也会进行垃圾回收。

YoungGC:新生代回收

FallGC:全量的垃圾回收,老年代和新生代一起回收。

JVM 垃圾回收器算法:

串行回收器

并行回收器

并发回收器 CMS

G1 回收器:新版本使用的 G1(G-ONE)垃圾回收器,G1 把整个的内存空间分成更小的区域,默认情况下分成 2000 个区域,每块区域管理较小的一块内存空间,内存空间越小,进行垃圾回收清理、标记时,速度就会更快,使用 Max 最大的 GC 暂停时间控制 stop the world 的时间。


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

秒杀系统是非常典型的对系统性能要求比较高的系统,所谓秒杀,就是有限的一个或多个商品以一个集体的价格、在一个确定的时间开始销售。因为它的价格非常低、数量非常少,所以导致大量的用户在开始售卖的这个时间点同时涌过来抢购这样商品,这样商品在 1 秒钟或者是瞬间就会被售光。所以,秒杀系统对系统的性能压力要求很高。

主要挑战和问题:高并发下的稳定性和安全性及对原有业务的影响。

高并发下的风险:

网络带宽耗尽、

服务器 Load 飚高,停止响应

数据库瘫痪

核心的架构方案思路:

1、和原有业务隔离;

2、网站商品信息页面静态化;

3、请求限流:只放入前面的部分请求,后面的请求直接拦截到秒杀结束页面;

4、简化流程;

5、前端采用 YSLOW 原则提升页面响应速度;

6、服务器性能调优;


用户头像

haha

关注

还未添加个人签名 2018.04.24 加入

还未添加个人简介

评论

发布
暂无评论
架构一期 第九周作业