架构师训练营 -W09H- 性能优化
一、请简述 JVM 垃圾回收原理。
0 目的
JVM垃圾回收的主要目的将JVM堆中未使用的对象进行回收,从而清理释放内存空间。
1 垃圾回收对象
通过使用可达性分析算法,从根节点(方法区的静态变量、线程堆栈的局部变量)开始,依次递归标记所有引用的对象,将所有引用对象标记完成后,未被标记的对象就是垃圾回收的对象。
2 垃圾回收的主要算法
JVM的主要垃圾回收算法有:清理回收算法、压缩回收算法、复制回收算法和分代回收算法。
清理回收算法是指将垃圾回收对象的内存地址记录好,在应用程序新建对象时,将此部分内存分配给新对象,此方法的缺点是内存空间地址并非连续。
压缩回收算法是指将存活的对象压缩到一段连续的内存空间中,其余的空间为程序可分配新对象的空间。
复制回收算法是指将堆空间分成空间1和空间2两个部分,在空间1中创建对象,当空间1用完后,将此空间内标记的可用对象复制到空间2中,此时空间1又为连续空闲空间,可被创建新对象使用。
分代回收算法是指将内存空间分为新生代和老年代两个区域。新生代的内存空间远小于老年代,应用程序新创建的对象放在新生代的Eden区,随后依次在Eden区+From区和Eden区+To区反复拷贝来进行垃圾回收,当持续运行一段时间后,已无法拷贝到From区或To区,JVM就会进行一次新生代和老年代的全量回收,然后将新生代放不下的对象放入到老年代中。
3 垃圾回收器
垃圾回收算法是垃圾回收器的理论基础。
在单核CPU时代,主要使用的是串行回收器。
在多核CPU时代,主要使用的是并行回收器。
在早期web应用时代,主要使用的是并发回收器CMS。
Java 1.7-1.8版本,主要使用的是G1回收器。
二、设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
0 秒杀系统的主要挑战和问题
瞬间高并发问题。
网络带宽耗尽问题。
服务器崩溃问题。
数据库瘫痪问题。
秒杀器问题。
1 核心架构方案和思路
系统架构层面
旧系统的重构优化 VS 构建新的秒杀系统
后端层面
服务器和网络准备
并发控制
秒杀器的防范
Web Server的优化
前端层面
前端页面静态化
秒杀静态页面优化
下单页面优化
二级页面优化
应急预案层面
域名分离,独立域名
服务器备机
壁虎断尾(保住核心业务)策略
万能出错页(「秒杀活动已结束」)策略
评论