7

JVM内存分配与回收策略

 4 years ago
source link: https://duanguangguang.github.io/2020/04/18/jvm/jvm-ram/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

JVM内存分配与回收策略

发表于 2020-04-18

| 分类于 jvm

| 0 Comments

| 阅读次数: 14

介绍JVM内存分配和回收策略。

一、内存分配

  • 对象首先会进入Eden区

  • 大对象直接进入老年代(示例:TestPolicy2)

    -XX:PretenureSizeThreshold=n,如果对象大于这个阈值,则直接进入老年代。

    注意:该参数只能在ParNew和Serial这两款垃圾收集器起作用

  • -XX:SurvivoRatio=8

    新生代:Eden+Survivor0(S0)+Survivor1(S1) = Xmn

    -Xmn100m -XX:SurvivoRatio=8,请问Eden区多大?

    Eden:S0:S1 = SurvivoRatio:1:1

    答案:100*(8/(8+1+1)) = 80M

  • 长期存活的对象进入老年代(示例:TestPolicy3)

    -XX:MaxTenuringThreshold,一个对象经历过多少次GC(MinorGC)会进入老年代,默认值15

  • 对象年龄的动态判断

    示例同TestPolicy3,去掉VM参数-XX:TargetSurvivorRatio=90。

  • 空间分配担保

    HandlePromotionFailure,检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试着进行一次Minor GC;如果小于,或者设置不允许冒险,那这时也要改为进行一次Full GC。

    • 在Minor GC之前,检查老年代最大可用连续空间是否大于新生代所有对象的大小
    • 内存够,执行Minor GC
    • 如果空间不够,检查HandlePromotionFailure是否开启
    • 如果没有开启,这个时候执行Full GC
    • 如果开启了,检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小
    • 如果大于,执行Minor GC
    • 如果小于,执行ull GC
    • 目的:减少Full GC

内存管理参数


Recommend

  • 41
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    谈谈JVM的垃圾回收器

  • 82
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    谈谈 JVM 的垃圾回收器

    JVM的GC经过多年的发展,大家对 Minor GC、 major GC的理解并不完全一致,所以我不打算在本文中使用这个概念。我把GC大概分为一下4类: Young GC:只是负责回收年轻代对象的GC; O...

  • 44
    • www.tuicool.com 6 years ago
    • Cache

    Linux内存页分配策略

    伙伴系统分配算法 在上一节, 我们介绍了Linux内核怎么管理系统中的物理内存. 但有时候内核需要分配一些物理内存地址也连续的内存页, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内存页. 上...

  • 28
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    JVM 笔记:内存分配策略

    1. 概述 1.1 简述 Java 技术体系的自动内存管理,最根本的目标就是解决两个问题:「自动化」地给对象分配、回收内存空间。 内存回收策略主要就是前面介绍的各种垃圾回收机制...

  • 15
    • my.oschina.net 4 years ago
    • Cache

    V8 引擎垃圾回收与内存分配

    工欲善其事,必先利其器,本文之器非器具之器,乃容器也,言归正传,作为一个前端打工人,左手刚 const 定义常量,忠贞不二,转头就 new 几个对象,玩的火热,真是个优秀的 jser,风骚的操作背后,必有日夜不辍的 QWER,外加一个走 A,废话不多说,浏览器内核是...

  • 7

  • 6

    Java进阶 JVM 内存与垃圾回收篇(一) 1.1 什么是JVM? 定义...

  • 7
    • blackdn.github.io 3 years ago
    • Cache

    JVM内存模型与 GC 回收机制

    “行至朝雾里,坠入暮云间。” 这篇真的拖了挺久…懒是一方面吧,还有就是挺忙的(开始找借口) 这篇写的时候有点无从下手的感觉,特别是四种引用那里不知道怎么用代码表达出来 然后之前忙着入党啊面试啊啥的...

  • 7
    • wendaoit.github.io 3 years ago
    • Cache

    JVM内存分配小总结

    JVM内存分配小总结 发表于 2021-09-18...

  • 15

    Redis内存兜底策略——内存淘汰及回收机制 Redis内存淘汰及回收策略都是Redis内存优化兜底的策略,那它们是如何进行兜底的呢?先来说明一下什么是内存淘汰和内存回收策略:...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK