昨天看到 gc 的时候查了一下,今天靠理解温习下,有些地方可能记不住了,网上对 gc 说法很多,按自己理解来,对错后续有机会再慢慢纠正。
jvm 内存分两个区,一个方法区,另外一个啥啥堆的区。在 gc 中方法区又称永久区,这里存储一些基本不会释放的内存。在 gc 区内分了两个区,年轻区和年老区。年轻区内分 eden 区和另一个分了两个部分的区,两部分分别是 from(s0) 区和 survivor(s1)区,这两个区会互相转移内存,同一时间只有一个区内有内存,另一个是空的。eden 满的时候会有一次小 gc (停止复制),eden 和两个区中当前在使用的区内的非消亡内存会移到另一个未使用的区,如果不够装就做一次判定,按比例将部分内存移入年老区。平时如果某块区域移动超过一定次数也会移入年老区。年老区满了以后会有一次大 gc (标记整理算法,这次 gc 又称 full gc),清除没有被引用到的实例。
目前大概就记得这么多。