写点什么

架构师训练营第九周作业

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

1)可达性分析算法。

从线程栈中的局部变量以及方法区的静态变量出发,将其引用的的对象标记,然后在继续标记这些已经标记的引用的对象,一次递归。标记过的对象是正在使用之中的对象。没被标记的可以被垃圾回收。


2)垃圾回收的方法

清理: 将垃圾对象占用的内存空间标记为空闲,记录在空闲列表里以复用。

压缩:存活的对象从堆的头部开始占用连续空间。

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


3)JVM 垃圾回收算法

目前常见的并发回收器 CMS(ConcMarkSweepGC) 和 G1 回收器。


4)JVM 中堆的分区

如上图所示,堆分成了 Eden 区,survivor Space 区(用来来回拷贝),Tenured 区和永久区。


完整的 CMS 算法过程:

Minor GC: 定义:从 Eden 区和 Survivor 区进行垃圾回收。

当 Eden 区满了之后,直接使用复制的方法,将可用对象复制到 S0 区。S0 满了会复制到 S1 区,S0 和 S1 区会循环 15 次左右。所有策略都是 Mark and Copy。没有压缩。


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

问题和挑战:

1)瞬间的高并发。如何保证响应,以及不影响其他的核心业务。数据库的压力。

2) 秒杀开始之前,不能暴露填写订单的 URL。URL 要是随机生成的。


核心的架构方案:

1)动态资源静态化。大大减少服务器,数据库的压力。


2)限流。基于计数器,让少部分人进入秒杀页面,下单页面和支付系统。其他的直接返回秒杀结束,把大部分访问挡住。


3)秒杀开始前,服务器动态随机生成下单页面的 URL。每次用户刷新时,服务器判断该商品是否正在秒杀。如果该商品正在开始秒杀,会返回下单的 URL。


4) 简化流程。


5)域名分离,不影响原来的业务。


用户头像

Melo

关注

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第九周作业