JVM的参数和知识点太多啦,记录下来,供自己随时回顾。

  1. java对象什么时候进入年轻代(新生代)?
  2. java对象什么时候进入老年代?
  3. 对象优先在Eden分配
  4. 大对象直接进入老年代
  5. 空间分配担保机制

java对象什么时候进入年轻代(新生代)?

当对象首次创建时, 会放在新生代的eden区, 如果不被GC回收,会一直在eden区

java对象什么时候进入老年代?

  1. 当新生代的对象进行多次YGC之后还一直存在并且达到设置的周期(默认15),会进入老年代。参数:-XX:MaxTenuringThreshold=15
  2. 一个Survivor区域中对象大小的总和加起来超过该区域50%,那么大于或者等于这个对象年龄的对象就会进入到老年代。这也就是JVM的动态对象年龄判断。 举个栗子:参数-XX:TargetSurvivorRatio=50 默认50%

对象优先在Eden分配

对象首先进入Eden区域,Eden区域满时会进行一次YGC,把存活对象放入S1区,再对Eden区域进行垃圾回收。第二次Eden区域满时进行第二次YGC,此时S1区的存活对象和Eden的存活对象被复制到S2区,Eden区的垃圾对象再次被回收

设置参数:-XX:SurvivorRatio=8

设置Eden区比例为80%,S1 和 S2 各为10%;若设置为5,Eden:两个S区 为5:1:1

大对象直接进入老年代

为了避免对象在Eden区、S1、S2区进行大量的内存复制,当大对象进入时,直接进入老年代。 配置参数:-XX:PretenureSizeThreshold=1M 当对象大于1M时,直接进入老年代

空间分配担保机制

在执行任何Minor GC(YGC)之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代对象总空间,如果这个条件成立,那么Minor GC可用确保是安全的,如果不成立,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败,如果允许,会继续检查之前历次Minor GC中晋升到老年代的平均对象大小是否<老年代最大可用的连续空间,如果小于,将尝试进行一次Minor GC,这次GC是由风险的,如果大于或者HandlePromotionFailure设置为false,那么这时要进行一次Full GC,为可能晋升到老年代的对象腾出空间。

风险指的是什么?指的是极端情况下MGC之后所有对象依旧存活,对象全部要进入老年代,如果老年代空间不够用,就会触发一次Full GC。如果Full GC之后老年代空间还是不够用,会触发OOM。

这块太绕了。。简单一点

          if(需要进行一次Minor GC){if(老年代可用空间 > 新生代所有对象大小){执行一次Minor GC;}else{if(-XX:-HandlePromotionFailure=true){if(老年代连续可用空间>之前晋升到老年代所有大小的平均值){执行Minor GC;/*执行之后有3种情况:1.剩余对象大小小于S区大小,对象进入S区2.剩余对象大小大于S区,对象进入老年代3.剩余对象大小大于S区,也大于老年代,执行一次Full GC。如果执行Full GC之后还是放不下晋升对象,报错OOM*/}else{执行Full GC;执行Minor GC;}}}}

剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件相关推荐

  1. fullgc触发条件_JVM的内存分配策略以及进入分代的条件

    JVM的参数和知识点太多啦,记录下来,供自己随时回顾. java对象什么时候进入年轻代(新生代)? java对象什么时候进入老年代? 对象优先在Eden分配 大对象直接进入老年代 空间分配担保机制 j ...

  2. python 保存文件 吃内存_python检测空间储存剩余大小和指定文件夹内存占用的实例...

    1.检测指定路径下所有文件所占用内存 import os def check_memory(path, style='M'): i = 0 for dirpath, dirname, filename ...

  3. Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看

    Oracle 数据库表空间 第一章:表空间的拓展 ① 查看剩余表空间大小 ② 查看表空间文件路径 ③ 通过新增表空间文件拓展表空间 ④ 查看表空间已分配大小 第一章:表空间的拓展 ① 查看剩余表空间大 ...

  4. 剩余 大小 查看内存_谈谈内存压缩那些事

     1. 技术背景 说到压缩这个词,我们并不陌生,应该都能想到是降低占用空间,使同样的空间可以存放更多的东西,类似于我们平时常用的文件压缩,内存压缩同样也是为了节省内存. 尽管当前android手机6G ...

  5. java内存设置最大内存_JVM中内存的设置和分配(最大内存,总内存,剩余内存的区别)...

    1.设置分配的内存大小 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的 ...

  6. jvm 堆外内存_jvm┃java内存区域,跳槽大厂必会知识点

    正文约: 2000字 预计阅读时间: 6分钟 文章首发于我的微信公众号:哪儿来的moon,欢迎大家关注 目录 目录 前言 正文 1.程序计数器 2.虚拟机栈 3.本地方法栈 4.堆 5.方法区 6.直 ...

  7. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  8. 剩余 大小 查看内存_计算机内存管理介绍

    作者:Adam原文:https://www.cnblogs.com/adamwong/p/10678015.html 计算机操作系统内存管理是十分重要的,因为其中涉及到很多设计很多算法.<深入理 ...

  9. python存储数据空间最小_python检测空间储存剩余大小和指定文件夹内存占用的实例...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. Unicode编码完全探究(三)之联通乱码
  2. iOS enum 定义与使用
  3. 2019年4月8日 1021. Remove Outermost Parentheses
  4. owls-uddi-matchmaker安装
  5. jedis入门_Jedis入门
  6. html5的优势ie9,WebQQ升级支持IE9 充分运用HTML5优势
  7. 若干排序算法简单汇总(二)
  8. jQuery选择器整理+知识总结
  9. 新装好SQL2005时SA无法登陆的解决办法
  10. 年会抽奖(错排算法)
  11. webrtc nack实现原理
  12. 小白学习latex的辅助资料
  13. 我所知道查找算法之斐波拉契(黄金分割法)查找
  14. 宝宝为什么不吃奶粉,奶爸必读文章
  15. L9110电机驱动电路
  16. 一周消息树:推低端iPhone,将会是苹果必然之举
  17. mongodb的单机和集群安装手册
  18. 全网清晰虚拟机安装截图
  19. 大话西游手游服务器维护要多久,大话西游手游:每周必看 2020年6月11日维护公告...
  20. Linux下使用ftp上传压缩文件,windows下载打开损坏问题

热门文章

  1. Shell编程之多命令顺序执行和管道符
  2. MFC串口通信设置及发送、中断接收程序
  3. Log4j.properties的简单配置
  4. docker rabbitmq_使用Docker集成Rabbitmq与安装elasticsearch教程
  5. pythonturtle画彩虹蟒蛇_python如何用turtle库画蟒蛇?
  6. 把关与服务的关系_泉州代做投标书-电子标书值得信赖 - 泉州广告服务
  7. mysql数据库查询语句过程_mysql(一) SQL查询语句执行过程
  8. c语言字符串定界符,关于c ++:按字符分割字符串
  9. python数据清理_Python-数据清理
  10. 计算机科学与技术专业机遇与挑战,科学网—填报专业大类志愿:机遇与挑战 - 雒运强的博文...