zoukankan      html  css  js  c++  java
  • java面试-什么是GC root

    一、什么是垃圾

    内存中已经不再被使用到的空间就是垃圾

    二、要进行垃圾回收,如何判断一个对象是否可以被回收?

    • 引用计数法

            很难解决对象之间的循环引用问题

    • 枚举根节点做可达性分析

            通过一系列名为“GC Roots”的对象作为起始点,从“GC Roots”对象开始向下搜索,如果一个对象到“GC Roots”没有任何引用链相连,说明此对象可以被回收。

    三、哪些对象可以作为 GC Roots 的对象:

    • 虚拟机栈中局部变量(也叫局部变量表)中引用的对象
    • 方法区中类的静态变量、常量引用的对象
    • 本地方法栈中 JNI (Native方法)引用的对象 
    public class GCRootDemo {
        private byte[] byteArray = new byte[100 * 1024 * 1024];
    
        private static GCRootDemo gc2;
        private static final GCRootDemo gc3 = new GCRootDemo();
    
        public static void m1(){
            GCRootDemo gc1 = new GCRootDemo();
            System.gc();
            System.out.println("第一次GC完成");
        }
        public static void main(String[] args) {
            m1();
        }
    }  

     解释:

    gc1:是虚拟机栈中的局部变量

    gc2:是方法区中类的静态变量

    gc3:是方法区中的常量

    都可以作为GC Roots 的对象。

  • 相关阅读:
    GitHub之fetch:更新fork后的项目
    实验二 结对编程 第一阶段
    博客园之鼠标点击特效
    博客园之鼠标粒子吸附特效
    实验五 单元测试
    实验四 代码评审
    第三次实验 UML 建模工具的安装与使用
    结对编程(阶段二)
    结对编程第一阶段
    实验一 GIT 代码版本管理
  • 原文地址:https://www.cnblogs.com/wjh123/p/11141497.html
Copyright © 2011-2022 走看看