第九周 - 作业

用户头像
jizhi7
关注
发布于: 2020 年 12 月 21 日



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

JVM垃圾回收:是将JVM堆(包括方法区)中已经不再被使用的对象清理掉,释放出内存资源。

1、标记:

JVM通过可达性分析算法进行垃圾对象的识别,具体过程:从线程栈帧中的局部变量,或者方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些对象是否引用了其他对象,继续标记。最后没有被标记的对象就是垃圾对象了。

2、清理:

1. 清理:将垃圾对象占据的空间清理掉,标记为空闲。碎片化严重。

2. 压缩:将存活的对象拷贝到堆头的一段连续空间中,其余的就是空闲空间了。

3. 复制:将堆空间分为两部分,只在一个部分创建对象,当这个部分用完后,将存活 的对象拷贝到另一个部分中。

3、分代垃圾回收:

1. 新生代:

1) Eden区:

2) From区:

3) To区:

2. 老年代

4、JVM垃圾回收器算法:

1. 串行回收器:进垃圾回收的时候,停止所有用户线程STW,启动一个垃圾回收线程(单核心CPU),先标记,再回收垃圾。

2. 并行回收器:垃圾回收的时候,也是停止所有的用户线程STW,启动多个垃圾回收线程(多核心CPU),进行垃圾回收。

3. 并发回收器CMS:初始标记STW,时间很短,并发标记,和用户线程一起执行,重新标记STW,多线程执行,并发清理,和用户线程并发执行。

G1回收器:



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

问题:

1. 突然有一个秒杀需求,并发访问量提高了100倍左右。

2. 时间紧,大概只有5天左右。

3. 网络带宽低,加载一张大图片导致系统崩溃。

解决:

1. 静态化:采用JS自动更新技术将动态页面转化为静态页面,利于反向代理服务器和CDN服务器的缓存。

1) 页面的静态化:将秒杀商品的list和detail做成静态的HTML页面,可以设计一个将动态页面转化为静态页面的工具系统。

2) 秒杀按钮的设计:将按钮的跳转url的商品的id放在一个js当中,当秒杀还没开始的时候,该js是空的,开始了,后台将该js上传,用户刷新就能获取到该js,就能点击秒杀按钮了。该js不缓存。

2. 设置阀门:只放最前面的一部分人进入秒杀系统。

点击秒杀的时候,基于TT的计数器,进行计数,大于1000的就不能给进入后面页面了。后面也可以继续使用计数器限制流量。

3. 简化流程:砍掉不必要的分支,如下单页面所有的数据库查询。下单成功,支付可以在1天内完成。

4. 采用YSLOW原则提升页面响应速度。

其它软件优化,appche、tomcat



用户头像

jizhi7

关注

还未添加个人签名 2018.09.08 加入

还未添加个人简介

评论

发布
暂无评论
第九周-作业