• JVM垃圾回收机制


    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。
         这种方式的特点是实现简单,而且效率较高,但是它无法解决循环引用的问题,因此在Java中并没有采用这种方式(Python采用的是引用计数法)。
         为了解决这个问题,在Java中采取了 可达性分析法
            该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。

     垃圾回收算法:

    1,mark-sweep标记清楚算法,最容易实现,但是有可能导致过多的内存碎片;

    2,copying算法,实现简单,运行高效,对内存空间对使用造成浪费

    3,Mark-compact 标记整理,不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理边界以外的内存;

    4,Generational Collection 算法,是目前大多数JVM垃圾收集器,采用的算法,核心是根据对象存活的周期长度分为若干个不同的区域,将堆区分为Tenured Generation和Young Generation,T的特点是只有少量对象才会被gc大部分用Mark-compact,Y大量,大部分用Copying;

    5,在堆区之外还有一个代就是永久代(Permanet Generation),它用来存储class类、常量、方法描述等。对永久代的回收主要回收两部分内容:废弃常量和无用的类。 

  • 相关阅读:
    wpf 设置 DataGrid中的某一列可以编辑
    wpf GIS 在地图上画正方形和圆形
    C#中treeView内容拖动效果功能的实现
    第三次作业——四则运算
    分布式版本控制系统Git的安装与使用
    第一次作业
    如何让免费的Azure工作起来
    Azure 的初体验
    免费美国手机号码、收发短信工具 – Pinger
    dotnet反编译工具
  • 原文地址:https://www.cnblogs.com/zuopy/p/7966670.html
Copyright © 2020-2023  润新知