美文网首页
2. Java的垃圾收集

2. Java的垃圾收集

作者: 东风微鸣 | 来源:发表于2018-04-08 20:46 被阅读0次

对Mark and Sweep垃圾收集的介绍是最理论的知识点. 在实际中, 需要做许多调整来适应真实世界的场景和需求. 一个简单的例子, 我们来看看JVM需要做什么样的记录才能继续安全地分配对象。

2.1 分割和压缩(Fragmenting and Compacting)

无论何时发生了清除, JVM必须确保不可达对象占用的区域可以被重复使用. 这会(并且终将)产生内存碎片, 类似于磁盘碎片, 导致以下2个问题:

  1. 写操作变得更耗时因为找到下一块足够大的空闲内存变得越来越难
  2. 当创建新对象时, JVM会分配连续的内存块. 所以如果碎片多到没有单独的空闲碎片区域是足够大来容纳新创建的对象时, 会发生分配错误.

为了避免这样的问题, JVM要确保碎片不会脱离掌控. 所以取代仅仅标记和清除的, 是一个"内存碎片整理"过程也会发生在垃圾收集期间. 该过程重新分配所有可到达的对象靠近彼此, 消除(或减少)碎片. 示例如下:


gchandbook_减少碎片.png

2.2 分代假设

如之前提到的, 做垃圾收集会完全停掉应用. 很明显, 对象越多, 垃圾收集时间越长. 但是如果我们可以让它工作在小一点的内存空间呢? 为调查该可能性, 一组研究者观察到在应用中的大部分的内存分配有2种类别:

  1. 大部分对象迅速变为不可用
  2. 大部分对象通常不会存活很(非常)长时间

这些观察组成了 Weak Generational Hypothesis. 基于该假设, VM的内存被分为年轻代(Young Generation)年老代(Old Generation). 后者有时候被称作Tenured.

gchandbook_分代假设.png

相关文章

  • 2. Java的垃圾收集

    对Mark and Sweep垃圾收集的介绍是最理论的知识点. 在实际中, 需要做许多调整来适应真实世界的场景和需...

  • 常见Java垃圾收集器

    常见Java垃圾收集器参见:参考 1参考1 Java垃圾收集器

  • Java 内存区域和GC机制

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与...

  • JVM垃圾回收-STW(Stop-The-World)

    Stop the World机制:在执行垃圾收集算法时,为了保证正确性,Java应用程序的其他所有除了垃圾收集收集...

  • Java垃圾收集

    Java垃圾收集算法 Java怎么判断一个对象是否可以回收?当一个对象没有被使用的时候,这个对象就可以回收了,那么...

  • Java垃圾收集

    众说周知,Java与C++同为支持面向对象的语言,但他们对内存的管理方式却有很大的不同。C++开发者往往需要手动调...

  • java垃圾收集

    转载、引用请标明出处https://www.jianshu.com/p/8ec0ee8ca7ee本文出自zhh_h...

  • Java 内存区域和GC机制一篇就够了

    Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之...

  • Java虚拟机(JVM)调优

    一、Java内存结构 二、堆内存的构成 三、堆内存参数的调整 四、GC如何确定垃圾 五、垃圾收集算法 六、垃圾收集...

  • 新手初学Java性能之 垃圾收集器

    前言 垃圾收集算法是内存回收的方法论;垃圾收集器是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现...

网友评论

      本文标题:2. Java的垃圾收集

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