• JVM-5-GC(Garbage Collection) 垃圾回收机制


    GC(Garbage Collection)  垃圾回收机制
     
    什么是垃圾回收机制
    垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露。
     
     
    内存中已经不再被使用到的空间就是垃圾
     
    c的垃圾回收是人工的,工作量大,但是可控性高。
    java是自动化的,但是可控性很差,甚至有时会出现内存溢出的情况,
    内存溢出也就是jvm分配的内存中对象过多,超出了最大可分配内存的大小。
     
    System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。
    然而System.gc()调用只是声明,无法保证对垃圾收集器的调用。
    所以System.gc()并不能说是完美主动进行了垃圾回收。
     
     
    一  jvm怎么确定哪些对象应该进行回收
     
    对象是否会被回收的两个经典算法:引用计数法,可达性分析算法。
     
    引用计数法
    JVM为每个对象维护一个引用计数,假设A对象引用计数为零说明没有任务对象引用A对象,那A对象就可以被回收了,但是引用计数有个缺点就是无法解决循环引用的问题。
     
    可达性分析算法
    为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。
    GC Roots通过一系列的名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明对象是不可用的。
    在Java中,可以作为GC Roots的对象包括下面几种:
    * 虚拟机栈中引用的对象;
    * 方法区中类静态属性引用的对象;
    * 方法区中的常量引用的对象;
    * 本地方法栈中JNI(即一般说的Native方法)的引用的对象;
     
    总的来说就是当一个对象通过GC Roots搜索不到时,说明对象可以被回收了,但什么时候回收还要看GC的心情!
     
    二在确定了哪些对象可以被回收之后,jvm会在什么时候进行回收
     
    1会在cpu空闲的时候自动进行回收
    2在堆内存存储满了之后
    3主动调用System.gc()后尝试进行回收
     
     
     
     
    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    使用 VSCode 编写 .NET Core 项目之初体验
    Apache自带 ab压测工具 Windows配置使用说明
    HTTP 错误 401.3
    Knockout学习,添加模板,事件,Mouseover,mouseout
    QQ空间、新浪微博、腾讯微博等一键分享API链接代码
    Session["Write"] = "Write";
    那一年,不堪回首的毕业设计
    iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题
    nopcommerce
    HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/11965848.html
Copyright © 2020-2023  润新知