zoukankan      html  css  js  c++  java
  • Java 垃圾回收

      续前节,前面列举了Java判断对象是否可回收的两种方法;可达性分析与引用权重法。多数虚拟机所采用的的是可达性分析方法。下面写一下Java中的垃圾收集算法。

      Java中垃圾收集算法主要有4中算法分别为:标记-清除法;复制算法;标记-整理法;分代收集算法。详情如下。

      1、标记-清除法

        标记清除法算法主要分两个阶段进行;①、标出所有需要回收的内存片段,②、回收所标记内存。此种方法存在两种不足。一、标记、清除两个过程对性能损耗较大,效率太低;二、标记清除后会产生大量的内存碎片。如下图:

      

      

      

      2、复制算法

      复制算法采用将Java程序申请的内存一分为二;此处用(A、B代表);首先使用A块内存;当到了GC回收时;将A内存中的所有存活对象所占用的内存片段复制并整理到B内存块中。A->B; B->A 以此方式交替进行。此方法存在弊端为;消耗大量内存空间、具体如下图:

     

     

      3、标记-整理法

      由于有的对象存活率较高对其它对象依赖程度也相对较高(可称为 老年代);以上两种方法都不能满足所以产生了此种算法:标记整理法。此方法与标记清理方法类似;后续清除方法不同;流程:标记->将存活对象向一端移动->清除 清除端对象。如下图:

       4、分代收集算法

      分代收集算法主要将内存分为新生代;老年代两种。在新生代中由于大批量对象处于可回收对象;所以采用复制算法。在老年代中由于大量对象并不需要清除操作;因此可以采用:标记-清除算法 或者 标记-整理算法。

  • 相关阅读:
    vue内置指令与自定义指令
    javascript全局方法与变量
    javascript继承
    promise对象
    javascript函数节流(throttle)与函数去抖(debounce)
    Mysql Explain 解读(基于MySQL 5.6.36)
    Mycat之日志分析跨分片事务以及存储过程的执行过程
    Mycat之日志分析 select * from travelrecord order by id limit 100000,100 的执行过程
    Mycat实战之离散分片
    Mycat实战之连续分片
  • 原文地址:https://www.cnblogs.com/axuduo/p/11442591.html
Copyright © 2011-2022 走看看