zoukankan      html  css  js  c++  java
  • 深入理解Java虚拟机二 阅读笔记

    xl_echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!

    ---

    > Java是一门面向对象的编程语言,在程序运行过程中每时每刻都有对象被创建,我们在写代码的时候,可以看到创建对象仅仅只是new关键字而已,而虚拟机中创建确实一个比较复杂的过程。

    ### 虚拟机内部创建对象流程图


    #### GC回收对象
    对象是否还“存活”
    Java程序运行产生了很多对象实例,垃圾收集器在对堆进行回收前都会判断对象是否还“存活”

    ### 对象是否存活算法
    - 引用计数算法
    - 可达性分析算法

    #### 引用计数算法
    给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1,当引用失效时计数器值就减1.大部分的结果都是当计数器统计完成技术值为0,那么该对象就是已经可以被回收。(它不能解决循环引用的问题)

    #### 可达性分析算法(GC采用的算法)
    该算法的基本思路就是通过可达性分析来判定对象是否存活的。这个算法的基本思路就是通过一系列的成为“GC Roots”的对象作为起点,从这些节点开始向下搜索搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链项链时,证明对象是可以回收的


    ### 垃圾收集算法
    - 标记-清除算法
    - 复制算法
    - 标记-整理算法
    - 分代收集算法

    #### 标记-清除算法
    最基础的收集算法是标记-清除算法,如同它的名字一样,算法为标记和清除两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。很多其他的算法都是基于标记清除这种算法的思想,所以说它是最基础的算法

    #### 复制算法
    为了解决效率问题,一种称为复制的收集算法出现了。它将内存分为两块对等大小,每次使用一块,当这一块使用完成,就将还存活的对象复制到另一块内存,一次性清除使用完成的那一块。它的优点就是实现简单,运行高效。

    #### 标记-整理算法
    复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会降低。标记过程与标记-清除算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

    #### 分代收集算法
    这种算法其实是将内存划分为不同的几块,一般是把Java堆分为新生代和老年代,根据不同的年代的特点选用上面的适合的算法。

  • 相关阅读:
    查找路径php.ini文件到底在哪里?
    对象androidandroid 开发中 如何取得ListView 的 每条Item 的对象
    文件内容红帽子数据库.profile文件内容详解
    思维流程对测试认识的三个阶段
    磁盘修改RHEL6使用udev修改asm磁盘名
    环境错误Unable to add window token android.app.LocalActivityManager$LocalActivityRecord@435def20 is not v
    deployconfigurationJboss remote access
    数据级别[Oracle] 事务隔离级别(Oracle的实现方式)
    Linux 基本命令
    PostThreadMessage
  • 原文地址:https://www.cnblogs.com/xlecho/p/11217112.html
Copyright © 2011-2022 走看看