zoukankan      html  css  js  c++  java
  • java内存

    内存回收策略

       1、标记清除

           优点:简单

           缺点:存在大量的碎片

       2、标记整理(老生代)

            优点:、

            缺点:

        3、复制(适用于新生代)

           优点:简单,高效

            缺点:因为实现上需要有一个区域作为复制区域,所以浪费内存

    可达性分析

        GC Root:虚拟机栈

                       方法区静态变量

                     方法区的常量引用的对象

                       本地方法栈

    引用

         强引用

         软引用(内存不足之前不会回收)

        弱引用(下一次GC回收)

        虚引用

    finalize执行过程:

        1、回收之前先判断是否需要执行finalize(覆盖了finalize方法而且没有执行过finalize方法)

       2、如果需要执行finalzie,则加入F-Queue,然后等待一个低优先级的线程去执行队列的finalize方法。如果执行完毕,GC会对队列的对象再一次标记,如果需要清除则会清除,所以该方法是逃脱被GC的最后机会。

       3、finalize的执行与否是不确定的,finalize线程的执行与否也是不确定的。

    回收方法区:

        1、类的实例都被回收

        2、类的classloader都被回收

          3、类的Class对象没在任何的地方被引用

    垃圾回收策略

       1、分代

        2、大对象直接进入老年代(避免mirror gc)

        3、空间分配担保(mirror  gc可能引起full  gc)

         4、full  gc比mirror gc慢10倍

        5、因为新生代的对象gc的快,所以采取复制的方式回收垃圾

           因为老生代的对象gc回收的对象少,如果采取复制的话,效率比较低,所以老生代一般的采取整理的方法。

          6、新生代分为3个区,Eden区和2个surrivor区,比例为8:1:1。其中Eden为8。

             新建对象的时候先分配在Eden区(大对象直接进入老年代),如果Eden区满了会引起mirror gc,mirroc gc会将Eden和surrivor区(from)的对象复制到surrivor区(to)(可能引起full  gc)。

             Eden区的对象在经过一次mirroc gc之后年龄就变成1,进入surrivor区(复制),如果年龄大于15(默认就会进入老年代)。

          7、老生代的内存比新生代大

        

        

       

  • 相关阅读:
    退出窗口时出现“当”的响声
    屏幕设备环境
    修改一个完全颜色的CListCtrl类
    修改一个完全颜色的CListCtrl类
    MFC中CString.Format的详细用法
    网上阅卷系统自动识别功能代码
    mfc 子对话框数据传给父对话框
    already defined in *.obj
    Object 的使用
    this 函数执行上下文
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5263737.html
Copyright © 2011-2022 走看看