美文网首页程序员
JVM系列——垃圾收集(五)

JVM系列——垃圾收集(五)

作者: 阿斯巴甜不太甜 | 来源:发表于2019-10-05 21:31 被阅读0次

内存分配与回收策略

Java的相较于C++的方便之处在于,可以自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。前面花了大量的篇幅介绍回收,现在来总结以下内存分配的一些策略。

1. 对象优先在Eden分配

多数情况下,对象在新生代Eden中分配,如果没有足够的空间,则会进行一次MinorGC。

-XX:+PrintGCDetails可以在发生垃圾收集时打印内存回收日志

2. 大对象直接进入老年代

所谓大对象是指,需要大量连续内存空间的JAVA对象,最典型的就是很长的字符串以及数组。经常出现大对象容易导致内存还有不少空间的时候就提前触发垃圾收集以获取足够的连续空间。

-XX:PretenureSizeThreshold用来设置大对象的阈值,即超过这个值的对象会直接被分配到老年代,这样做的好处是能避免在Eden区及两个Survivor之间发生大量的内存复制。另外这个参数只能写具体数字,不能加单位,比如3MB得写出3145728

3.长期存活的对象将进入老年代

为了识别哪些对象应该放在新生代,哪些对象应该放在老年代,虚拟机给每个对象定义了一个对象年龄计数器。如果对象出生在eden并且多次minorGC后都仍然存活,那么每次GC,年龄就增加1岁,默认15岁以后,就会晋升到老年代。可以通过-XX:MaxTenuringThreshold进行设置。

4.动态对象年龄判定

为了更好地适应不同程序的内存状况,虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才能晋升老年代,如果在Survivor中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。

相关文章

  • JVM系列——垃圾收集(五)

    内存分配与回收策略 Java的相较于C++的方便之处在于,可以自动化地解决两个问题:给对象分配内存以及回收分配给对...

  • 7种JVM垃圾收集器特点,优劣势、及使用场景

    本系列会持续更新。 今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是...

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • JVM系列——垃圾收集(二)

    垃圾收集算法 1. 标记—清除算法 标记—清除算法就和其名字一样,分为标记和清除两个阶段:首先按上一篇文章中提到的...

  • JVM系列——垃圾收集(一)

    垃圾收集 哪些内存需要回收? 什么时候回收? 怎么回收? 为什么需要了解垃圾收集呢? 当需要排查各种内存溢出、内存...

  • JVM系列——垃圾收集(三)

    垃圾收集器 上一篇讲的收集算法是内存回收的方法论,而垃圾收集器则是内存回收的具体实现。书中讨论的收集器基于JDK1...

  • JVM系列——垃圾收集(四)

    CMS收集器 CMS收集器是一种获取最短回收停顿时间为目标的收集器,基于的是标记-清除算法。它的运作过程相对于去墙...

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

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

  • 4.JVM系列-垃圾收集器总结

    目录 一、背景 二、垃圾收集器比较 三、常用JVM参数 四、垃圾收集器对比 五、关系图 一、背景 前面的章...

网友评论

    本文标题:JVM系列——垃圾收集(五)

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