zoukankan      html  css  js  c++  java
  • 浅谈jvm垃圾回收

    作为应届生进到公司,公司运营出现问题,拖着不给转正,两个多月失去应届生身份开启社招之旅,被问到垃圾回收机制有点懵,看了一些资料来简单记录一下,都是按照自己的理解来写,可能会有错误

    怎么判断一个对象是否是一个垃圾?(怎么感觉像失恋在骂人)

    有两种方法:

    1、引用计数器算法

    通过将每一个对象的引用进行计数,当引用次数(引用次数是当前的状态会根据当前引用增加和减少)为零时,这个对象就成为了一个垃圾,可以被回收掉。

    2、根搜索算法

    将特定对象作为根对象,不断搜索它的引用,形成一个引用链,当对象没有被引用时,它就是一个垃圾,可以被回收掉。

    回收策略

    1、标记清除法

    通过根搜索算法将被引用的对象标记,然后将没有标记的对象清除,效率低,清除的时候要遍历所有对象

    2、复制法

    将内存分为两块区域,工作空间和闲置空间,将活着的对象移动到空闲空间,然后清除工作空间,效率高,但是空间减半,有点浪费内存

    3、标记整理法

    通过根搜索算法把活着的对象标记出来,移动到一块内存中,然后将这块内存以外的区域上的对象全部回收,效率比较高内存占用也低

    分代回收

    将内存中的资源分为年轻代、老年代、持久代,而采用不同的策略来回收,提高效率
    年轻代一般为刚创建的对象,存活率低,每次垃圾回收都会回收很多,这就需要采用标记整理法来处理
    老年代是经历多次垃圾回收还活着的对象,这部分对象比较少,采用复制法,也不会浪费大量的空间
    持久代是类和和方法不会被清理

  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/freven/p/15263699.html
Copyright © 2011-2022 走看看