美文网首页
Android内存优化2:JVM的GC算法-分代收集算法

Android内存优化2:JVM的GC算法-分代收集算法

作者: 陈兴强 | 来源:发表于2021-05-07 06:33 被阅读0次

一:分代收集理论

分代收集建立在两个分代假说之上:
1.弱分代假说
大多数对象都是朝生夕灭
2.强分代假说
经历越多次垃圾收集过程没有被回收的对象越难消完

分代假说其实是一套符合绝大多数垃圾收集的经验法则,它在时间开销和空间开销之间找到了一个平衡点,它将JVM堆划分成不同的区域,按照年龄分配到不同区域存储,如果一个区域属于弱分代假说,每次回收只标记少量存活的对象,而不标注大量要被回收的对象。如果属于强分代假说的,把它们放在一起,JVM可以以较低的频率回收这个区域。

二:现在JVM划分

现代JVM一般把Java堆划分成新生代、老年代两个区域
新生代:
新生代中每次垃圾收集都会有大量对象清理掉,而没有清理掉的少量对象会转移到老年代中存放。
老年代:
一个对象如果在新生代没有被清理掉,转移到老年代中存放。老年代的内存大小一般比新生代大,能存放更多的对象。如果对象比较大(比如长字符串或者大数组),并且新生代的剩余空间不足,则这个大对象会直接被分配到老年代上。

三:跨引用假说

跨引用假说为解决什么问题呢?
对象不是孤立的,会存在跨代引用,新生代的对象如果被老年代的对象引用,如果要找到引用它的对象,就要遍历整个老年代中所有对象,反过来同样如此,如此会造成大量的性能开销。
跨引用假说如何实现?
新生代上建立一个全局的数据结构,这个数据结构把老年代划分成多个小块,标记老年代哪一块内存会被跨代引用,Minor GC(新生代垃圾收集)时,只有跨代引用的小块加入到GC Roots扫描,如此Minor GC清理不了时会加入到老年代中,跨代引用的问题也没有了,同时它只需要维护记录数据,不需要编译整个老年代所有对象,减少了开销。

相关文章

  • java核心知识点,pdf文档,让你彻底告别重复的CRUD

    JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 Java四种引用类型 GC 分代收集算法 VS 分...

  • HotSpot JVM GC收集器学习总结

    HotSpot JVM中GC收集器学习总结:分代回收 + 收集算法 1. GC收集器(Overview) 2. C...

  • JVM

    JVM(1):Java 类的加载机制 JVM(2):JVM内存结构 JVM(3):Java GC算法 垃圾收集器 ...

  • GC垃圾回收器

    垃圾回收算法 01、垃圾回收的过程 在分代收集算法下: 当JVM内存不足时,就会触发年轻代得GC; 首先,会通过可...

  • 简单谈谈JVM中的GC(中)

    书接上文,在了解JVM的分代模型后,接着来简单聊聊JVM中GC算法和不同的GC收集器【求关注】 GC回收算法 一个...

  • Android内存优化2:JVM的GC算法-分代收集算法

    一:分代收集理论 分代收集建立在两个分代假说之上:1.弱分代假说大多数对象都是朝生夕灭2.强分代假说经历越多次垃圾...

  • JVM第二弹

    JVM第二弹 GC分代收集算法VS分区收集算法 分代收集算法 当前主流的VM垃圾收集都采用“分代收集“算法,这种算...

  • Java GC机制

    GC机制的基本算法是:分代收集。 年轻代: 在新生代中,使用"停止-复制"算法进行清理,将新生代内存分为2部...

  • jvm学习

    1,java类的加载机制2,JVM内存结构3,GC算法 垃圾收集器4,jvm知识点总览

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

网友评论

      本文标题:Android内存优化2:JVM的GC算法-分代收集算法

      本文链接:https://www.haomeiwen.com/subject/jqajdltx.html