第九周 - 性能优化 -JVM 及秒杀
问题一:JVM
问:请简述 JVM 垃圾回收原理。
答:
1、什么是JVM垃圾:一个对象没有对象的引用,也就是无法使用到的对象就是垃圾对象;
2、如何定位垃圾:
a、直观计数法:统计每个对象的引用数,若计数为0则为垃圾;存在问题:循环引用问题
b、可达性分析:根据gcroots遍历可达对象,不可达的则为垃圾;gcroots一般为内存栈对象或者静态区对象;
3、怎么回收垃圾:
a、清理:直接把垃圾对象置空间为可覆盖使用的空间;存在问题:内存不连续,内存碎片
b、清理压缩:将非垃圾对象移动到一起,后面的空间则为可使用对象;存在问题:移动数据比较麻烦
c、复制:另外开辟一个空间,将所有的非垃圾对象移动到新的空间,原空间清空;优点:简单快速,缺点:需要空间支持
d、分代:YOUND(EDEN-from-to)| OLD;
首先在EDEN区分配空间,若空间不足,触发MINORGC:
EDEN+from/to --->to/from 使用复制的方法;
如果to放不下,直接放到OLD;如果对象倒腾了16次,则放到OLD区;
大对象直接放到OLD区;
如果OLD区满了,触发FULLGC;使用的是清理压缩的方法;
4、垃圾回收处理时机:垃圾回收时需要stop-the-world,CMS、g1
问题二:秒杀系统
问:设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
答:1、挑战:瞬时的高并发的请求对现有系统的压力,
思路: 重新搞一套新系统针对秒杀场景
2、挑战: 新系统如何应对高并发
架构方案:流量漏斗,一层一层的过滤流量;
a、资源静态化+CDN支持
b、查询直接使用缓存、不经过数据库
3、挑战:防止作弊
架构方法:a、推送静态js标记开始秒杀,防止篡改秒杀按钮的可用性
b、下单页面加入随机数作为验证,秒杀开始才能响应秒杀请求
评论