第九周 - 命题作业
1.请简述 JVM 垃圾回收原理。
JVM垃圾回收就是将JVM堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。
JVM垃圾回收要解决4个方面的问题:
怎么知道哪些对象要回收?JVM通过一种可达性分析算法进行垃圾对象的识别;可达的对象就是在用的对象;对在用的对象进行标识,没有标识的就是可回收的垃圾对象;
如何回收?(回收有三种方法):清理 - 把垃圾对象清理掉,但清理的缺点:对象清理完会产生很多碎片空间;压缩 - 将后面可用对象从前边的占用空间尾部开始进行拷贝;剩下的就是一段连续空白空间;复制 - 把空间分数两块:从碎片空间把可用的对象拷贝到另一块内存空间中去后,剩下的空间就是连续的空白空间;
回收过程中的内存空间如何管理?(JVM分代垃圾回收):分代 - 就是把堆区域分成了两个区域,分别是:新生代、老年代;新生代 - 绝大多数对象的生命周期是非常短暂的,一个对象一创建就被放在新生代中;新生代回收的速度比较快;老年代 - 较少数的对象会进过较长的时间一直被引用着,这些对象放到老年代;
用什么样的过程进行回收?(JVM垃圾回收器算法):垃圾回收器是一个或者几个线程去承担标记、拷贝、清理等这些动作;比较知名的几种垃圾回收器:串行回收器、并行回收器、并发回收器CMS、G1回收器;
2.设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
技术挑战:
瞬间高并发:
风险:带宽耗尽;
服务器:崩溃,可以理解成自己给自己准备的D.D.O.S攻击;
秒杀器
第一种:秒杀前不断刷新秒杀页面,直到秒杀开始,抢着下单;
第二种:跳过秒杀页面,直接进入下单页面,下单;
核心思路:
开发一个新的秒杀系统
服务器准备:
style服务器(Lighttpd集群)
图片服务器(Nginx集群)
静态服务器(Apache集群)
交易服务器(JBoss动态集群)
带宽准备:
图片出带宽上限
CDN准备
设计原则:
静态化
采用JS自动更新技术将动态页面转化为静态页面
并发控制,防秒杀器
设置阀门,只放最前面的一部分人进入秒杀系统
简化流程
砍掉不重要的分支流程,如下单页面的所有数据库查询
以下单成功作为秒杀成功标志,支付流程只要在1天内完成即可;
前端优化
采用YSLOW原则提升页面响应速度
评论