JAVA垃圾回收机制

为什么要有垃圾回收机制?

           java中的垃圾回收机制是方便我们程序员开发,我们只要复制对象的创建而不用管,内存的释放,java虚拟机自动帮我们回收内存。

 

回收哪一些内存?

           主要是回收堆里面没有被引用的对象

 

什么时候进行垃圾回收操作?是否可以人工调用方法进行垃圾回收?

           java堆内存的时候调用垃圾回收机制,可以调用GC方法提示虚拟机进行垃圾回收,但不会马上进行垃圾回收。

 

通过什么方法判断哪一些内存可以回收?

         引用计数法,可达性分析算法

         引用计数法(java没有使用引用计数法):

                 例:  Test   s1 = new  Test();         

                                    s2 = new Test();     上一个new  Test()  已经没有变量引用了,就标记可以回收了

                 缺点:  如果有两个对象相互引用,也就是说 A 里面引用这 B,B 里面引用着 A 那个这两个对象就不能被回收

        可达性分析算法(java虚拟机采用的算法):

                 此算法的核心是通过一系列的“ GC Roots”对象作为起点,查询被该对象引用的对象,形成引用链,当一个对象到"GC Roost"没有任何引用链时,表示该对象不可达,证明该对象不可用。

          

          在java中可以作为GC  Roots对象包含以下几种。

                1.虚拟机栈引用的对象

                2.方法区中静态属性引用的对象

                3.方法区中常量引用的对象

                4.本地方法栈中引用的对象

 

垃圾回收采用几种算法? 

         标记清除算法,复制收集算法,标记整理算法

         标记清除算法缺点:会产生内存碎片

                  如上图,如果一个较大的对象,需要占三个内存空间,虽然上图是有三个以上的空间,但是这三个空间都不是连续在一块的,就产生了内存碎片

         复制收集算法缺点:浪费内存

                  如上图所示,复制收集算法是把一块内存区域划分为两块内存区域,然后把左边已用内存区域复制到右边内存区域,再清空左边内存。

         标记整理算法缺点:效率相比前两个较低

            

                      这种算法把已用的内存空间全部往前移,从第一个空间开始,这样就不会产生内存碎片了

 

java虚拟机是如何清理内存的?

        它把内存划分为几代:新生代,老年代,永久代         

                    新生代和老年代是在堆内存中的,而永久代是在方法区里面的

                    新创建的对象放在新生代,新生代里面分为几个区,eden区,S0区,S1区

                    当堆内存快要满了的时候,java虚拟机会进行Young GC(年轻代垃圾回收),年轻代是采用复制收集算法,先扫描eden区,把非垃圾对象移动到S0区,然后清空eden区,第二次进行Young GC时他会把eden区和S0区的非垃圾对象移动到S1区,然后再清空S0区和eden区,如此反复15此,如果一个对象还没被清理掉,那个对象就进入了老年代,新生代采用复制收集法的原因就是因为需要回收的对象比较多。

                   老年代垃圾回(Full GC)收采用的时标记整理算法,老年代垃圾回收时JVM会停止运行

                   永久代一般在方法区内存不足的时候才会回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值