浅谈jvm垃圾回收

作为应届生进到公司,公司运营出现问题,拖着不给转正,两个多月失去应届生身份开启社招之旅,被问到垃圾回收机制有点懵,看了一些资料来简单记录一下,都是按照自己的理解来写,可能会有错误

怎么判断一个对象是否是一个垃圾?(怎么感觉像失恋在骂人)

有两种方法:

1、引用计数器算法

通过将每一个对象的引用进行计数,当引用次数(引用次数是当前的状态会根据当前引用增加和减少)为零时,这个对象就成为了一个垃圾,可以被回收掉。

2、根搜索算法

将特定对象作为根对象,不断搜索它的引用,形成一个引用链,当对象没有被引用时,它就是一个垃圾,可以被回收掉。

回收策略

1、标记清除法

通过根搜索算法将被引用的对象标记,然后将没有标记的对象清除,效率低,清除的时候要遍历所有对象

2、复制法

将内存分为两块区域,工作空间和闲置空间,将活着的对象移动到空闲空间,然后清除工作空间,效率高,但是空间减半,有点浪费内存

3、标记整理法

通过根搜索算法把活着的对象标记出来,移动到一块内存中,然后将这块内存以外的区域上的对象全部回收,效率比较高内存占用也低

分代回收

将内存中的资源分为年轻代、老年代、持久代,而采用不同的策略来回收,提高效率
年轻代一般为刚创建的对象,存活率低,每次垃圾回收都会回收很多,这就需要采用标记整理法来处理
老年代是经历多次垃圾回收还活着的对象,这部分对象比较少,采用复制法,也不会浪费大量的空间
持久代是类和和方法不会被清理

原文地址:https://www.cnblogs.com/freven/p/15263699.html