写点什么

架构师训练营 week9

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

请简述 JVM 垃圾回收原理。



Java堆是JVM主要的内存管理区域,里面存放着大量的对象实例和数组。在垃圾回收算法和垃圾收集器之前,首先要做的就是判断哪些对象已经“死去”,需要进行回收即不可能再被任何途径使用的对象。

1、引用计数法

引用计数法是这样:给对象中添加一个引用计数器,每当有一个地方使用它时,计数器值就加1。当引用失效时,计数器就减1。任何时刻计数器为0的对象就是不可能再被使用的。





现在主流的Java虚拟机都没有使用引用计数法,最主要的原因就是它很难解决对象之间互相循环引用的问题

2、可达性分析

可达性分析的基本思路:通过一系列称为"GC Roots"的对象作为起点,从这些节点开始向下搜索,如果从GC Roots到一个对象不可达,则证明此对象是不可用的,如下图所示。







Java语言中,可作为GC Roots的对象包括下面几种:



  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象

  2. 本地方法栈JNI(即一般说的Native方法)引用的对象

  3. 方法区中类静态常量引用的对象

  4. 方法区中常量引用的对象



对于Java程序而言,对象基本都位于堆内存中,简单来说GC Roots就是有被堆外区域引用的对象。



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

1.挑战和问题

秒杀系统需要面对的技术挑战如下:

  • 对现有网站业务造成冲击

  • 高并发下的应用、数据库负载

  • 突然增加的网络及服务器带宽

  • 直接下单:对秒杀URL的控制,避免秒杀前被刷。



秒杀系统的核心问题:

  • 并发读: 核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据。

  • 并发写: 要求我们在数据库层面独立出来一个库,做特殊的处理。

  • 我们还要针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。



其他需要处理的问题:

  • 如何控制秒杀商品页面购买按钮的点亮

  • 如果只允许第一个提交的订单被发送到订单子系统

2.架构方案

秒杀系统的应对策略主要有以下几点:

  • 秒杀系统独立部署

  • 秒杀商品页面静态化,动静分离

  • 租借秒杀活动网络带宽

  • 动态生成随机下单页面URL

  • 热点数据隔离:处理热点数据通常有几种思路:一是优化,二是限制,三是隔离。

用户头像

devfan

关注

还未添加个人签名 2017.11.12 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 week9