标签:教程 current 方法区 系统 并发 一个 相等 初始 str
堆中使用对象,但是不能一直放在那里,会占内存,所以需要垃圾回收,释放多余内存,从而保证程序的正常运行。
堆中A,B没有别的对象引用,双方互相依赖,这样的话,两个对象永远无法被回收
从GC Roots往下追踪,如果在roots的引用链上,则表示对象是可达的,否则,表示对象不可达,对象是可以回收的
GC Roots都有哪些:
清除前
清除后
可以看出来:效率并不是太高,同时回收之后的空间并不是连续的,造成内存空间过碎,如果有一个比较大的对象需要分配对象可能会造成又一次内存回收的动作,造成系统的再次使用。
将内存分为相等的两份,回收内存的时候,将A区的存活对象放到B区,然后一次性的将A区的所有内存回收,代价是:内存被分为两份,可用内存减少一半。
新生代:区域内的对象存活时间较短,大部分对象使用一次都会被回收,所以使用复制算法即可
老生代:存活的对象很高,同时也没有空间使用复制算法,所以使用标记清除法或者标记压缩法,效果更好。
使用一个线程使用分代清除法回收对象,回收过程中会出现stop world
使用多线程使用分代清除法回收对象
目标:最短回收停顿时间
分为四个步骤:
标签:教程 current 方法区 系统 并发 一个 相等 初始 str
原文地址:https://www.cnblogs.com/zhangchiblog/p/11874359.html