作业一
1. 标记回收对象-对象已死?
Java堆是JVM主要的内存管理区域,里面存放着大量的对象实例和数组。在垃圾回收算法和垃圾收集器之前,首先要做的就是判断哪些对象已经“死去”,需要进行回收即不可能再被任何途径使用的对象。
1.1 引用计数法
引用计数法是这样:给对象中添加一个引用计数器,每当有一个地方使用它时,计数器值就加1。当引用失效时,计数器就减1。任何时刻计数器为0的对象就是不可能再被使用的。
1.2 可达性分析
可达性分析的基本思路:通过一系列称为"GC Roots"的对象作为起点,从这些节点开始向下搜索,如果从GC Roots到一个对象不可达
强引用(StrongReference)
如果一个对象具有强引用,那垃圾回收器绝不会回收它。
软引用(SoftReference)
内存空间充足时,垃圾回收器不会回收
内存空间不足时,就会尝试回收这些对象。
弱引用(WeakReference)
相比较软引用,只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它锁管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
虚引用(PhantomReference)
虚引用顾名思义,就是形同虚设。与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
垃圾收集算法
标记-清除算法分为“标记”和“清除”两个阶段
标记:首先标记出所有需要回收的对象
清除:在标记完成后统一回收所有被标记的对象
复制算法:
首先将可用内存分为大小相等的两块,每次只使用其中的一块。
当这一块的内存用完了,就将还存活的对象连续复制到另一块上面,然后把使用过的内存空间一次清理掉
标记-整理算法
标记-整理算法分为“标记”和“整理”两个阶段:
标记:首先标记出所有需要回收的对象
整理:让所有的存活的对象都向一端移动,然后直接清除掉边界以外的内存
秒杀系统-挑战和问题
1.突增的服务器及网络需求
2.业务高并发,服务负载重
3.业务耦合度高,引起系统“雪崩”
思路:
将请求拦截在系统上游,降低下游压力
充分利用缓存
消息中间件
页面静态化
限流
评论 (1 条评论)