写点什么

九周作业

用户头像
独孤魂
关注
发布于: 2020 年 07 月 29 日
九周作业

一、请简述 JVM 垃圾回收原理

垃圾回收是 java 的一大特色,解放了开发人员,大家都不需要关注内存了。

java 的垃圾回收理念这么多版本以来一直没变,主要分为

1、新生代

2、老年代

其中新生代又分为 eden,和两个大小相等的 survivor,他们的大小比例默认为 8:1:1。基于大部分对象朝生夕灭的特性,一般的对象创建后主要放在新生代 eden。一次 young GC 后,eden+一个 survivor 假如对象还存活,则进入另一个 survivor 区。而老年代主要存放大对象和经过 15 次 young GC 扔存活的对象。

然后。。JDK8 开始,原数据区 metaSpace 也被列入垃圾回收管理范围。

垃圾回收算法

由于新生代和老年代垃圾存活度不一样,又研究出了几种垃圾回收算法

标记清除

标记出无用对象,然后清除,常用于老年代,缺点会产生内存碎片

复制算法

针对新生代大部分对象 GC 时已死的特性,仅复制存活对象到 survivor 区,然后清空 eden 和另一个 survivor

标记整理

由于标记清除会出现内存碎片,所以在标记清除之后,把存活的对象搬到一起,避免碎片空间浪费,这就是标记整理,用于老年代

垃圾回收器

垃圾回收过程中,由于垃圾回收的过程不一样,研究出了几种垃圾回收器,它们主要分为:

1、串行垃圾回收:单线程处理垃圾回收过程(缺点很明显,但是当时 CPU 单核)

2、并行垃圾回收:多线程处理垃圾回收过程(产生于多核 CPU 盛行后)

3、并发垃圾回收:仅在标记时 STW,垃圾回收时不暂停,可以与其他线程一起执行,减小 GC 暂停时间


由于负责的区域不同,由这 3 种类型产生了多种垃圾回收器:

1、新生代串行 serial,新生代并行 parNew,新生代基于吞吐量并行 parallel Scavenge

2、老年代串行 serial Old, 老年代并行 Parallel

3、老年代并发 CMS

其中他们的组合模式如上图连线。

JDK8 之后,产生了一种新的垃圾回收器 G1,它直接处理了新生代和老年 GC,它属于并发垃圾回收器,过程与 CMS 相似,很大的特点是它将内存分成很多大小在 1M-32M 的 region,部分 region 属于新生代,部分属于老年代。

G1 主要用于解决超大堆 GC 暂停时间长的问题。

G1 维护了一个 region 列表,脏内存比例较大的 region 排在前面。这样 GC 的时候,它只选择部分脏数据比例较大的 region 进行垃圾回收,达到了高效,快速(部分回收)的效果。

G1 已经很优秀了,燃鹅。。另一款更优秀的垃圾回收器 ZGC 已经诞生了,据说它以后将成为默认垃圾回收器。


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

首先,秒杀系统应对的是大量并发,那么它必须要满足高性能。应对海量请求在瞬间爆发,怎么避免用户不卡顿,服务器不宕机?这就需要从用户到服务器各个节点上使出浑身解数,大力提高性能。

秒杀系统的挑战


秒杀系统架构方案:

1、增加网络带宽

2、设置 CDN 缓存

3、页面静态化,秒杀入口 URL 在秒杀前 2s 生成

4、大量使用 redis 缓存,应对用户登录等秒杀前服务

5、降低秒杀商品列表,图片等大小

6、缓存商品库存,服务器本地缓存秒杀结束状态,从页面根据秒杀请求量限流,后续节点根据服务器能力限流

7、设置秒杀结束页面,所有异常均导流到秒杀结束页面

8、网关白名单,对秒杀器拒绝访问


发布于: 2020 年 07 月 29 日阅读数: 50
用户头像

独孤魂

关注

还未添加个人签名 2019.04.10 加入

还未添加个人简介

评论

发布
暂无评论
九周作业