九周作业

用户头像
独孤魂
关注
发布于: 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 日 阅读数: 34
用户头像

独孤魂

关注

还未添加个人签名 2019.04.10 加入

还未添加个人简介

评论

发布
暂无评论
九周作业