GC-垃圾回收机制

亦凉 2022-05-19 03:39 377阅读 0赞

主要是4个关键词:年轻代,老年代,持久代,gc roots

年轻代:

是什么?

新创建的对象都存放在这里。因为大多数对象很快变得不可达,所以大多数对象在年轻代中创建,然后消失。当对象从这块内存区域消失时,我们说发生了一次“minor GC”。

作用?

年轻代分为3块,Eden区和2个Survivor区。

绝大多数新创建的对象分配在Eden区。

在Eden区发生一次GC后,存活的对象移到其中一个Survivor区。

在Eden区发生一次GC后,对象是存放到Survivor区,这个Survivor区已经存在其他存活的对象。

一旦一个Survivor区已满,存活的对象移动到另外一个Survivor区。然后之前那个空间已满Survivor区将置为空,没有任何数据。

注意:其中一个Survivor区必须保持空。如果数据存在于两个Survivor区,或两个都没使用,你可以将这个情况作为系统错误的一个标志。

怎么做?

在年轻代中jvm使用的是Mark-copy算法,就像算法名字说的那样有两个步骤,第一是标记(Mark) 第二是copy(复制),Mark主要用于标记出还活着的实例,然后清除掉没有被标记的实例,释放内存,然后Copy部分则是将还活着的实例根据年龄拷贝到不同的年龄代,

老年代:

是什么?

没有变得不可达,存活下来的年轻代对象被复制到这里。这块内存区域一般大于年轻代。因为它更大的规模,GC发生的次数比在年轻代的少。对象从老年代消失时,我们说“major GC”(或“full GC”)发生了。

作用?

经过重复多次这样的步骤后依旧存活的对象将被移到老年代。或者说经过多次minor GC,数据被转移到老年代

怎么做?

当老年代数据满时,基本上会执行一次GC。执行程序根据不同GC类型而变化,所以如果你知道不同类型的垃圾收集器,会更容易理解垃圾回收过程。

永久代(permanent generation):

是什么?

也称为“方法区(method area)”,他存储class对象和字符串常量。所以这块内存区域绝对不是永久的存放从老年代存活下来的对象的。在这块内存中有可能发生垃圾回收。发生在这里垃圾回收也被称为major GC。

gc roots:

是什么?

一组必须活跃的引用

Q:对什么东西进行垃圾回收?

A:从gc root搜索不到且经过第一次标记,清理后,仍没有复活的对象

参考:http://www.importnew.com/20354.html

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读

    相关 GC-垃圾回收机制

    主要是4个关键词:年轻代,老年代,持久代,gc roots 年轻代: 是什么? 新创建的对象都存放在这里。因为大多数对象很快变得不可达,所以大多数对象在年轻代中创建,然后

    相关 GC-垃圾回收机制

    为什么要学习GC? JVM有自动回收机制,但当需 要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我 们就需要对这些“自动化”的技术实施必要

    相关 JVM 垃圾回收机制GC

    目前为止,jvm已经发展处三种比较成熟的垃圾收集算法:1.标记-清除算法;2.复制算法;3.标记-整理算法;4.分代收集算法 1.        标记-清除算法 这种垃圾回