架构师训练营 -W09H- 性能优化

用户头像
BlazeLuLu
关注
发布于: 2020 年 08 月 05 日

一、请简述 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的优化

前端层面

  • 前端页面静态化

  • 秒杀静态页面优化

  • 下单页面优化

  • 二级页面优化

应急预案层面

  • 域名分离,独立域名

  • 服务器备机

  • 壁虎断尾(保住核心业务)策略

  • 万能出错页(「秒杀活动已结束」)策略



用户头像

BlazeLuLu

关注

还未添加个人签名 2018.05.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -W09H- 性能优化