架构师训练营 - 第九周 - 作业
请简述 JVM 垃圾回收原理。
JVM垃圾回收就是将JVM堆中的已经不再使用的对象清理掉,释放出内存资源。
JVM通过一种可达性反洗算法进行垃圾对象的识别,具体过程如下:
从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记。所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。
进行完标记之后,JVM就会对垃圾对象占用的内存进行回收,回收主要有三种方法
清理:将垃圾对象占据的内存清理掉,其实JVM并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。
压缩:从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间
复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复制到另一个空间中
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
高并发下的应用、数据库负载
用户在几乎同时访问秒杀页面,对于秒杀系统的稳定性威胁最高
安全性
秒杀页面地址,秒杀的规则等都是需要提前设计好规则,秒杀页面可以选在在秒杀开始之前再进行自动随机生成,对于秒杀页面访问次数以及IP也可以做一些限制。以防止刷单等情况出现
可能存在超卖的情况
高并发下的库存计算在进行分布式事务计算过程中,会出现超卖情况
对现有系统冲击
秒杀系统在高并发情况下的安全性稳定性都在接受考验,因此对现有稳定业务必然造成影响。一旦秒杀系统出现问题,会连累其他现有系统。
网络带宽
在进行秒杀项目之前,需要确立秒杀系统的网络带宽的最大升级量,以支持高并发场景下的带宽需求
架构设计思路:
秒杀系统的用户更关心如何更快速的秒到商品,而不是浏览商品详情等非常细节的用户体验,因此秒杀系统的设计应该 尽可能的简单。
1.商品页面购买按钮只在秒杀活动开始时才点亮,其他时刻均为灰色,不可点击。采用JS文件引用,将秒杀是否开始的标志和下单页面URL的随机数参数放到该JS文件中,当秒杀开始的时候生成一个新的JS文件冰杯浏览器加载。该JS采用随机版本号,并且不被浏览器、CDN和反向代理的缓存
2.下单表单购买数量只能是一,送货地址和付款方式都设置为用户默认,并且允许订单提交后修改。只有第一个提交的订单发送给网站的订单子系统,其余用户提交恬淡后只能看到秒杀页面
版权声明: 本文为 InfoQ 作者【狂奔嘀兔纸】的原创文章。
原文链接:【http://xie.infoq.cn/article/1d1c378a427cc6f3ca3e23c05】。文章转载请联系作者。
评论