理解平均负载

一般我们排查系统变慢的问题时候,会执行uptime或者top命令,来查看操作系统的负载: 1 2 3 4 5 6 $ uptime 21:13:31 up 23 min, 1 users, load average: 0.52, 0.58, 0.59 $ top top - 21:13:31 up 23 min, 1 users, load average: 0.52, 0.58, 0.59 ... uptime和top命令的第一行输出都是一样的,分别是系统当前时间、系统已经运行的时间、当前登录用户数以及系统平均负载。而系统平均负载又分为三

GC复制算法

GC复制算法是一个非常大胆的GC算法,简单来说,就是把某个内存空间中的活动对象复制到另一个内存空间中,然后把原空间的所有对象都回收掉。 算法过程 首先我们把堆分为两个空间From和To,当From空间完全占满时,GC将活动对象全部复制到To空间,复制完成后互换两个空间。From空间和To空间大小必须一致

GC部分标记-清除法

部分标记-清除算法只对可能有循环引用的对象群使用标记-清除,对其他对象还继续使用引用计数法。但是与普通的标记-清除算法不同,部分标记-清除算法查找的是非活动对象,这样就可以解决循环引用无法回收的问题了。 算法术语 在部分标记-清除算法中,对象会被涂成4中不同的颜色来进行管理: 黑色:black,绝对不是垃

GC引用计数法

引用计数法引入了计数器的概念,表示一个对象被多少个其他对象引用,这是一个无符号的整数值。 算法过程 在其他的GC算法中,当需要进行GC时会调用GC函数来清理垃圾空间。然而在引用计数法中没有明确启动GC的时刻,它在程序运行的过程中通过对象的引用计数器来进行内存管理。计数器在两种情况下会发生变化,一个是创建

GC标记-清除算法

GC标记-清除算法是最早被发明的GC算法,跟字面意思一样,算法由两个阶段组成:标记阶段和清除阶段。标记阶段把所有活动对象都做上标记,然后再清除阶段把没有被标记的对象回收。 算法过程 可以用代码描述描述整个过程: 1 2 3 4 func mark_sweep() { mark_phase() sweep_phase() } 算法除了标记和清除过程,对于对象的分配我们也需要做相应的策略。 标记阶段 每个