zoukankan      html  css  js  c++  java
  • 说说你对java中GC机制的理解

     

    GC负责回收无任何引用对象的内存空间,而不是回收对象本身。

            Java对象内存分配,主要是在Java堆区上的内存分配,采用分代分配机制,GC机制就主要采用分带回收机制。

            对象被创建时,首先分配在年轻代的Eden区(大对象可以直接被创建分配到年老代),大多数对象在被创建不久后就不在使用,因此很快变得不可达,当Eden区满时,执行Minor GC将不可达对象清除,并将剩余的对象复制到一个存活区S0中,此时,另一个存活区S1是空白。

            到下一次Eden区满,在执行一次Minor GC,将Eden区不可达对象清除,将存活对象复制到S1区,并将刚才S0区中不可达对象清除,将此时Eden区存活对象和S0存活对象一并拷贝到S1区。

            当两个幸存区切换几次,达到设定阈值,将任然存活的对象复制到年老区中,此时其实只有很小的一部分。

            年轻代采用算法是“停止-复制算法”。 

            在年轻到经过多次停止-复制法清除不可达对象后,存活的对象都被复制到年老代中,需要更多的内存空间,所以年老代的空间一般比年轻代大,但在老年代发生GC的次数比较少,当年老带内存不足时,执行Major GCFull GC)清除不可达对象,采用“标记-整理算法”,即:标记出仍然存活的对象(存在引用的),将所有存活的对象向一端移动,以保证内存的连续。

            永久代,主要回收两种:常量池中的常量,无用的类信息。常量的回收很简单,没有引用了就可以被回收。对于无用的类进行回收,必须保证三点: 

    1)类的所有实例都已经被回收

    2)加载类的ClassLoader已经被回收

    3)类对象的Class对象没有被引用(即没有通过反射引用该类的地方)

  • 相关阅读:
    山寨 《寻找房祖名》
    css3 弹性效果上下翻转demo
    CSS3 Hover 动画特效
    判断一个字符串通过变化字符的位置,是否可以组成回文
    获取多个字符串中的共同字符
    转换为回文的步数
    IOS中图片的一些处理方法
    python django的一点笔记
    一个图片切割的例子
    一个批量修改文件夹中文件名的命令
  • 原文地址:https://www.cnblogs.com/KingAndPig/p/13842121.html
Copyright © 2011-2022 走看看