写点什么

第九周 作业 1

发布于: 2021 年 01 月 02 日

1、简述 JVM 垃圾回收原理

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

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

标记完成之后,JVM 会对垃圾对象占用的内存进行回收,回收主要有三种方法:

• 清理:将垃圾对象占据的内存清理掉,其实 JVM 并不会真的将这些垃圾内存进行清理,而

是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创

建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。

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

间就是连续的空闲空间。

• 复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候 ,将标

记过的可用对象复制到另一个空间中。

分代回收:

JVM 在具体进⾏垃圾回收的时候,会进⾏分代回收。绝⼤多数的 Java 对象存活时间都⾮常短,

很多时候就是在⼀个⽅法内创建对象,对象引⽤放在栈中,当⽅法调⽤结束,栈帧出栈的时

候,这个对象就失去引⽤了,成为垃圾。针对这种情况,JVM 将堆空间分成新⽣代(young)

和⽼年代(old)两个区域,创建对象的时候,只在新⽣代创建,当新⽣代空间不⾜的时候,

只对新⽣代进⾏垃圾回收,这样需要处理的内存空间就⽐较⼩,垃圾回收速度就⽐较快。


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

秒杀系统的挑战:秒杀活动的并发访问量远超系统正常运营时的处理能力,如果为此而重构系统,增加服务器等,会带来大量的资源浪费。

秒杀的技术挑战:对其他业务可能造成冲击,对数据库的负载和网络带宽带来更高的要求。以及面对秒杀器等抢单软件。

特点:秒杀活动持续时间比较短,而且超出秒杀商品量的请求是没有意义的。

架构方案:

秒杀系统独立部署;秒杀商品页面静态化,可以极大降低无效请求对系统资源的消耗;增加 cdn 缓存,进一步减少系统的请求;秒杀 detail 页面 url 随机,秒杀前才放出,并控制访问上限;增加阀门控制,只允许限额内的用户请求进入下一步流程。



用户头像

还未添加个人签名 2019.09.13 加入

还未添加个人简介

评论

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