写点什么

架构师训练营第九周作业

用户头像
关注
发布于: 2020 年 11 月 22 日

作业一:

  • 请简述 JVM 垃圾回收原理。

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

答案:

JVM垃圾回收原理

JVM内存回收就是将JVM堆中不再被使用的对象清理掉,释放宝贵的内存资源。

JVM通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或是方法区的静态变量出发,将这些对象引用的对象进行标记,然后看这些标记的对象是否引用了其他对象,继续进行标记,所有被标记的对象都是被引用的对象,而那些没有被标记的对象就是可回收的对象了。

进行标记完以后,JVM就会对垃圾对象占用的内存进行回收,回收主要有三种方法:

  • 清理:将垃圾对象占用的内存清理掉,其实JVM并不会真的将这些内存进行清理,而是将这些垃圾对象占用的内存标记为空闲,记录在一个空闲列表中,当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给新对象。

  • 压缩:从对空间的头部开始,将存货对象拷贝放在一段连续的内存空间中,那么剩余的内存空间就是连续的空闲内存。

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

在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。

  • 在老年代中,因为对象存活率高、没有额外空间对它进行分配担保,就必须使用标记-清理算法或者标记-整理算法来进行回收。

  • 秒杀系统主要的挑战和问题,以及解决思路

    • 瞬间高并发的访问,会将网络带宽占满,服务器负载压力高,系统崩溃

    解决思路:

    • 页面静态化

    • 图片等静态文件采用CDN

    • 设置阀门,只放前面一部分用户的请求到服务器端

    • 简化流程,减少不必要的数据库操作

    • 秒杀器,要避免秒杀开始前,直接进到下单页面

    解决思路:

    • 秒杀开始前前才下发动态生成的JS文件,秒杀开始前不暴露下单入口

    发布于: 2020 年 11 月 22 日阅读数: 18
    用户头像

    关注

    还未添加个人签名 2018.03.09 加入

    还未添加个人简介

    评论

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