【007】【JVM——内存分配和恢复策略】

【007】【JVM——内存分配和恢复策略】

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



内存分配与收回策略

JVM的自己主动内存管理要自己主动化地解决两个问题:对象分配内存以及回收分配给对象的内存。回收内存前几篇已经讲了。如今说内存分配。对象的内存分配一般分配在堆内存中,也可能经过JIT 编译后被拆散为标量类型间接地在栈上分配。对象主要分配在新生代的Eden 区上,假设启动了本地线程分配缓存,将按线程优先在TLAB (本地线程分配缓存)上分配。

少数情况下也可能会直接分配在老年代中,分配的规则不是固定的,与使用哪一种垃圾收集器组合,还与虚拟机中内存相关參数设置有关。

对象优先在Eden区分配

多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC

  • 新生代GC (MinorGC):新生代的垃圾收集动作, Java 对象大多生命短,所以MinorGC 很频繁,速度也比較快。

  • 老年代GC ( MajorGC或者FullGC):老年代的垃圾收集动作,出现了MajorGC ,常常会伴随至少一次的MinorGC (非绝对的。在ParallelScavenge 收集器的收集策略中就有直接进行MajorGC的策略选择过程)。MajorGC的速度一非常会比MinorGC慢10倍以上。


大对象直接进入老年代

大对象就是须要大量连续内存空间的Java对象。最典型的大对象就是那种非常长字符串及大数组。

-XX : PretenureSizeThreshold 參数能够设置值大对象直接在老年代中分配。避免垃圾回收时在Eden 区及两个Survivor 区之间发生大量的内存拷贝。

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

虚拟机分代收集的方法管理内存,在内存回收时就必须能识别哪些对象应当放在新生代,哪些对象应放在老年代中。

虚拟机给每一个对象定义了一个对象年龄( Age )计数器。假设对象在Eden 出生并经过第一次MinorGC后仍然存话,而且能被Survivor容纳的话,将被移动到Survivor 空间中,并将对象年龄设为1。

对象在Survivor 区中每熬过一次Minor GC,年龄就添加1岁。 当年龄添加到一定程度(默觉得15 岁〉肘。就会被晋升到老年代中。对象晋升老年代的年龄阈值,能够通过參数-XX:MaxTenuringTbreshold 来设置。

动态对象年龄判定

为了能更好地适应不同程序的内存状况,虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold 才干晋升到老年代,假设在Survivor 空间中同样年龄全部对象大小的总和大于Survivor 空间的一半,年龄大于或等于该年龄的对象就能够直接进入老年代,无须等到MaxTenuringThreshold 中要求的年龄。

空间分配担保

在发生MinorGC 肘,虚拟机会检測之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小。假设大于,则改为直接进行一次FullGC 。

假设小于。则查看HandlePromotionFailure 设置是否同意担保失败:假设同意,那仅仅会进行MinorGC :假设不同意,它会被更换一次FullGC

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 多线程中 ManualResetEvent 的用法[通俗易懂]

    多线程中 ManualResetEvent 的用法[通俗易懂]///<summary>///手动重启///</summary>privateManualResetEventmanualReset=newManualR

    2022年7月1日
    27
  • hbase 单机安装部署

    hbase 单机安装部署hbase 单机安装部署

    2022年4月23日
    37
  • PAT乙级经验分享(19.03.02)「建议收藏」

    PAT乙级经验分享(19.03.02)「建议收藏」一、关于报名条件:有身份证就行!!报名费用:256人民币(?为什么涨价)报考方式:https://www.patest.cn考场:自选就近考点参与考试。二、关于要准备的东西准考证!!身份证!!考试会发草稿纸!如果有喜欢写写画画的同学们可以带笔啦(走进考场,看看大家纷纷拔出笔的瞬间,我:…)必胜的决心(?)三、关于考试(PAT乙级)考试时间为180分钟;乙级共有5道…

    2022年4月29日
    242
  • 适合做回归分析的数据_时序数据库与实时数据库

    适合做回归分析的数据_时序数据库与实时数据库JTSGeometry关系分析:缓冲区分析(Buffer)包含所有的点在一个指定距离内的多边形和多多边形凸壳分析(ConvexHull)包含几何形体的所有点的最小凸壳多边形(外包多边形)交叉分析(Intersection)A∩B交叉操作就是多边形AB中所有共同点的集合联合分析(Union)AUBAB的联合操作就是AB所有点的集合差异分析(Diff…

    2025年6月1日
    3
  • chmod命令用法_Linux修改权限命令chmod用法示例

    chmod命令用法_Linux修改权限命令chmod用法示例点击上方”Linux中文社区”关注,星标或者置顶18点00分准时推送,第一时间送达责编:中文妹|来自:Linux迷|链接:r6d.cn/tNnDLinux中文社区(ID:Linux-China)第47次推文图源:pexels上一篇:色情版“微信”背后的秘密正文Linux中的Chmod命令用于更改或分配文件和目录的权限。在Linux/Unix系统中,文件和目录的可访问…

    2022年6月18日
    28
  • 剑指Offer——Trie树(字典树)

    剑指Offer——Trie树(字典树)剑指Offer——Trie树(字典树)Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

    2025年9月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号