zoukankan      html  css  js  c++  java
  • JAVA垃圾回收机制 -(确定垃圾)

    什么情况下会发生内存泄漏?

    长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收,这就是Java中内存泄漏的发生场景。

    1. 引用计数法

    定义:每个对象有一个引用计数器,当对象被引用一次计数器加1,引用失效一次减1.。当计数器为0时,对象可被GC回收。

    问题:当两个对象相互引用时,可能引发内存泄漏。

    public class GcObject{
        public Object instance = null;
    }
    
    public class Test{
    
        public static void main(String[] args){
            Gcobject obj1 = new GcObject();//step1
            Gcobject obj2 = new GcObject();//step2
            obj1.instance = obj2;//step3
            obj2.instance = obj1;//step4
            obj1 = null;//step5
            obj2 = null;//step6
        
        }
    
    }

     

     2. 根搜索算法(可达性算法)

    算法核心:是从GC Roots对象作为起始点,利用图论知识,图中可达对象便是存活对象,不可达对象(没有任何GCroot引用链相连)便是垃圾内存。

    GCroot 1. 方法区中的静态引用。2 JVM栈中的引用。3.本地方法栈中的引用。

  • 相关阅读:
    笨办法29IF语句
    笨办法28布尔表达式
    笨办法27记住逻辑
    笨办法26恭喜你,可以进行一次考试了
    笨办法25更多更多的练习
    笨办法23复制文件
    成功转移(✿◡‿◡)
    笨办法22到目前为止你学到了什么?
    vue.js
    webpack-优化
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/12951378.html
Copyright © 2011-2022 走看看