• 4.2Java垃圾回收机制(Garbage Collection)


    4.2Java垃圾回收机制(Garbage Collection)

    Java垃圾回收机制与C++垃圾回收机制的对比

    C++程序员不仅要关注业务逻辑还要关注内存管理

    C++垃圾回收

    特点:

    类比饭店:

    • 自己吃饭自己擦桌子

    Java垃圾回收

    类比饭店:

    • 请一个服务员(JVM),专门擦桌子

    Java垃圾回收过程
    • 发现无用对象---如何发现无用对象是个重点

      • 引用计数法

        • 原理如图:

        • 每个对象加一个引用,被引用一次计数+1,通过对象是否被引用判断对象是否是垃圾

        • 缺点

          • 遇见循环引用就会出现问题

          • 实例题:

          • /**
            * 垃圾回收算法循环引用机制
            * @author Lucifer
            */
            public class StudentNo3 {
               //定义一个成员变量
               String name;
               //
               StudentNo3 friend;

               public static void main(String[] args) {
                   StudentNo3 s1 = new StudentNo3();
                   StudentNo3 s2 = new StudentNo3();

                   s1.friend = s2;
                   s2.friend = s1;
                   s1 = null;
                   s2 = null;
                   //System.gc(); //向系统发出了一个请求,能否调GC,至于调用还是不调用由系统决定
              }
            }
          • 示例图:

      • 引用可达法(根搜索算法)

        • 用算法跟踪节点

    • 回收无用对象占用的内存空间

    通用的分代垃圾回收机制

    本质:将对象进行分类,不同对象的生命周期是不一样的

    • 年轻代(Eden Survivor)

    • 年老代(Tenured/Old)

    • 持久代


    年轻代(Eden Survivor)

    特点:

    • 新生成的对象首先都是放在Eden区

    目标:

    • 尽可能快速的收集掉那些生命周期短的对象

    • Eden满了以后触发Minor GC会清理年轻代的内存---算法过一遍所有的对象,无用的清除掉,算法采用效率较高的复制算法---有用的就复制到Survivor区(1区或者2区,对象再次满了以后查Survivor1区的,有用的放到Survivor2区,无用的清除,Eden里面有用的放到Survivor1区,无用的清除。当一个对象在Survivor1区2区反复横跳到15次以后放入Tenured/Old年老区。效率高但是会浪费内存空间。

    • 年轻代区域存放满对象后会将对象放到年老代区域

    年老代(Tenured/Old)

    特点:

    • 在年轻代中经理了N(默认15)次垃圾回收后仍然存活的对象

    • 生命周期长

    • 数量多的时候要启动Major GC和Full GC(全量回收)---代价很高,性能消耗很高,全面清理年轻代区域和年老代区域对象

    持久代

    特点:

    • 存放静态文件,Java类、方法等。

    • 持久代堆垃圾回收没有显著影响

    • 对象在它就在

    示例图:

    JVM调节

    主要关注:

     

    It's a lonely road!!!
  • 相关阅读:
    在Ubuntu下编译FFmpeg
    AirSim
    上海高分无人机大赛
    飞机维修流程
    心灵感应灯三 服务器端
    Kmeans基本思想
    小觅双目相机测试
    ORB SLAM2在Ubuntu 16.04上的运行配置
    Moleskine智能笔+专用本:写完随时传到手机
    机器学习培训
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14613101.html
Copyright © 2020-2023  润新知