zoukankan      html  css  js  c++  java
  • JVM 学习笔记(二)

    JVM 堆中几乎存放着java中所有的对象实例,在在垃圾回收前先要判断对象是否已死,这里对对象的判断主要有:

    1.  引用计数法

         给对象中添加一个引用计数器,每当有一个地方引用他时,计数器就加1;当引用失效时,计数器就减1。任何时间计数器为0时,对象就不可能在次使用。

    2.  根搜索法

        通过一系列的名为GC Roots 作为起点,从这些节点开始向下搜索,搜索走过的路径成为引用链(Reference Chain), 当一个对象到GC Roots 没有任何引用链时,则说明此对象时不可到达的。

      可以作为GC Roots的对象包括:

      A. 虚拟机栈中的引用对象

      B. 方法区中的常量引用的对象

      C. 方法区中类的静态属性引用的对象

      D. 本地方法栈中JNI(即:Native方法)的引用的对象

    垃圾回收算法

    1. 标记-清除算法

      标记-清除是最为集成的的算法,主要分为标记、清除两个阶段。首先标记出所有需要回收的对象,在标记完成后,统一进行回收。(如下图)

      缺点: 一是效率不高;二是空间碎片多(如果需要一整颗空闲内存,则需要触发一次碎片整理)

    2.  复制算法

    为提高时间方面效率,复制算法将内存空间安装容量分成大小相等的两块,每次只使用其中一块,当这一刻内存用完时,就将还存活的对象复制到另一块上面,然后再把已经使用过的内存空间一次性清理掉。 如下图:

     缺点: 空间利用率非常低,为原内存的一半。

    3.  标记-整理算法

         由于复制算法在对象存放率较高时,就要执行较多的复制(效率一样变低),更为重要的是不想浪费50%的空间,就需要有格外的空间分配担保,以对应极端情况下所有对象都有100%的存活。(如下图)

  • 相关阅读:
    <Android 应用 之路> 聚合数据SDK
    AngularJS所有版本下载地址
    <Android 应用 之路> 天气预报(三)
    <Android 应用 之路> 天气预报(二)
    Java集合框架—Set
    HBase数据模型(2)
    HBase数据模型(1)
    ESP8266串口WiFi扩展板详解
    Arduino ESP8266编程深入要点
    <Android Framework 之路>多线程
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/3714107.html
Copyright © 2011-2022 走看看