写点什么

作业 --week09

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

请简述 JVM 垃圾回收原理。

 解析:

1.(Where)JVM回收哪里的垃圾:

   JVM组成架构:类加载器,运行时数据区,执行引擎。

   类加载器:负责加载.class字节码文件。

   运行期数据区:.class字节码被类加载器加载到运行时数据区,放置到线程共享区的方法区作为缓存。

   执行引擎:将字节码的操作执指令转换为操作系统的本地指令,交给CPU执行。

   运行期数据区:线程共享区:方法区和堆;线程私有区:Java栈和程序计数器。

   JVM垃圾回收,主要针对堆回收垃圾。



2.(HOW)如何回收

   标记,清理,压缩,复制。

   标记:可达性分析算法标记可达对象。从线程栈的局部变量表,或者静态变量出发,标记所有可达对象,未被标记的对象,视为不可达对象,即标记为垃圾。

   清理:回收垃圾,可采用清理算法。清理算法优点:灵活有效分配内存,缺点:多次垃圾回收后,内存碎片增多,不利于大对象分配。

   压缩:回收垃圾后,存活的对象,向一端压缩,剩余部分为连续大块内存。优点:减少内存碎片,有利于大对象分配;缺点:回收大块内存空间,耗费时间长。

   复制:大块内存分成两个部分AB,A块内存分配满后,回收垃圾,存活下来的对象,复制到B内存块。A块内存被清理干净。B块分配满回收垃圾,存活对象被复制到A。

   如图示:

3.分代:

   原因1:内存块小,回收垃圾效率高。

   原因2:局部变量随着栈帧出栈而消亡,生命周期比较短。大量的对象都属于这种类型。

   内存空间分代:新生代和老年代。新生代分为:Eden伊甸园区,From和To区

   图示:

4.算法

   垃圾回收算法:串行垃圾回收算法,并行垃圾回收算法,并发垃圾回收算法,G1垃圾回收算法。

G1回收器特点:分成更多的小块区域,针对小块内存区回收垃圾,效率更高,占用的资源更少。对用户程序的影响更小。可管理的内存空间更大。

当前比较主流的垃圾回收器。



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

解析: 主要挑战:1.瞬间高并发; 2.用户跳过秒杀页面,直接下单;

           主要问题:1.瞬间高并发导致服务器崩溃:

                            瞬间高并发读:商品列表缩略图商品详情大图等产生大量流量,带宽可能被耗尽。

                            瞬间高并发写:瞬间高并发写入数据库,导致数据库崩溃。

                           2.用户跳过秒杀页面,直接下单,会导致商品在秒杀前被卖出。

           核心架构方案:

0.系统隔离:如果使用现有系统承担秒杀业务,那么现有系统需要承担瞬间高并发量可能是原来的成百上千倍, 直接扩容,则成本昂贵,实际上不可行。所以不在原有系统上做秒杀业务,可新开发秒杀系统,单独承担秒杀业务。与原有系统隔离。即使秒杀系统考虑不周,出现异常,不影响原有系统。

           1.瞬间高并发读架构方案:静态化

              静态化目的:减少页面动态生成,即减少对数据库高并发读,减轻数据库压力

              静态化列表和详情:静态化秒杀商品列表页面和秒杀商品详情页面。可单独开发静态化系统,

              静态化控制下单:目的:阻止用户跳过秒杀页面直接下单。

              方法:秒杀的商品和下单的URL,在秒杀前几分钟放出。可将秒杀商品的ID在秒杀前几分钟写入指定JS,商品详情页面轮询检查JS,核定当前商品ID在JS中,则点亮购买按钮,允许用户下单,同时给出下单的地址。

           2.瞬间高并发写架构方案:三道阀门设计

             目的:并发控制。秒杀业务决定只有少部分用户可以秒杀成功,大部分用户秒杀失败。

             措施:用户如果秒杀失败,就可以阻止用户进入秒杀后面的业务流程,直接告诉用户秒杀失败。

                       这样可以阻挡拦截大部分并发请求,大大降低服务器负载压力。

             方法:三道阀门设计,假设秒杀商品56件。

                      阀门1:限制进入1000并发请求;

                      阀门2:限制进入100并发请求;

                    阀门3:限制进入56个并发请求

            图示:



用户头像

张荣召

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
作业--week09