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

86bd01c8fdb229d9a762c97ae5d7a1b0.png

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;}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino的串口结束符及串口缓冲区

文章目录1.深入理解缓冲区和Serial.available()&#xff1a;2.深入理解串口结束符3.验证结论&#xff1a;1.深入理解缓冲区和Serial.available()&#xff1a; 运行下面的代码&#xff0c;我发现如果不在串口输入任何数字&#xff0c;就会一直显示“no”&#xff0c;输入一个数…

android 圆角边框边框渐变,支持边框、圆角、渐变色、透明度的GradientButton

最近在项目中发现好多Button背景颜色相同&#xff0c;但圆角大小不等的Button&#xff0c;这样就得写一大堆的shape或者selector&#xff0c;不便于管理及后期维护&#xff0c;于是乎变想能不能写一个支持边框、圆角、渐变色、透明度的万用Button呢。为了能够兼容button自带的属…

(斜率,点和线段)zzuli1196数星星(二)

题目描述 一天&#xff0c;小明坐在院子里数星星&#xff0c;Gardon就出了个难题给他&#xff0c;让他数数天上的星星最多有多少个是在同一条直线上的。天上的星星太多了&#xff0c;小明马上就看花了眼&#xff0c;你能写个程序来帮他计算么&#xff1f; 输入 首先输入一个整…

鸿蒙ide如何运行,深入浅析华为鸿蒙IDE安装与Hello World

一、系统安装1. 到官网下载HUAWEI DevEco Studio2. 安装二、创建项目创建项目目前还没有手机选项&#xff0c;所以我先选择一个电视&#xff1a;IDE的环境看起来和idea差不多&#xff0c;应该比较容易上手。从“关于”里也可以看到&#xff0c;确实是基于IDEA开源版本开发的。我…

springboot 上传文件解析入库_SpringBoot + easyexcel + WebUploader 实现文件上传并解析

1. WebUploader的使用&#xff0c;引入css和js&#xff0c;css其实没什么用&#xff1a;2. 定义上传框&#xff1a;选择文件开始上传3.相关jquery&#xff1a;// 文件上传jQuery(function() {var $ jQuery,$list $(#thelist),$btn $(#ctlBtn),state pending,uploader;uploa…

中快捷搜索_同事用1分钟,我用半小时,原来是因为这8个Word快捷键,秒杀一切办公技巧...

同事用1分钟&#xff0c;我用半小时&#xff0c;这8个Word快捷键&#xff0c;秒杀一切办公技巧​mp.weixin.qq.com文&#xff5c;王羽卒今天给小伙伴们分享几个实用又有效的快捷键&#xff0c;帮助快速完成工作&#xff0c;同事用了半小时&#xff0c;你1分钟就能解决哟&#x…

动态规划理论基础

(采用维特根斯坦的表述方式) 1.达成目的过程可以由不同阶段组成 2.阶段由达成目的的条件确定 (注&#xff1a;规定每一次走一步&#xff0c;第一步就是一个阶段) 3.每个阶段由不同的状态组成 4.状态是阶段中可能面临的所有情况 (注&#xff1a;第一步落脚点可能有多个&am…

荣耀x10max能不能升级为鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...

4月24~26日&#xff0c;华为将召开开发者大会&#xff0c;届时手机使用的鸿蒙系统将正式上线&#xff0c;华为和部分荣耀手机将会首先支持。其实&#xff0c;早在2月22日的华为Mate X2的发布会上&#xff0c;余承东就说过4月发布鸿蒙OS。华为并不想推出鸿蒙系统&#xff0c;如果…

android 7.0新增控件,自定义Android控件,封装Arcgis for Android测距测面积工具控件

控件的功能包括&#xff0c;测距、测面积、撤销、恢复、清除、完成六个功能。测距&#xff1a;在地图上绘制线段进行长度测量测面积&#xff1a;在地图上绘制一个面&#xff0c;进行面积测量撤销&#xff1a;撤销到上一步绘制&#xff0c;只能撤销未完成的测量恢复&#xff1a;…

cpython需要另外安装吗_在windows环境下安装和使用Python(CPython)

在windows环境下安装和使用Python(CPython)一、下载1.选择Python版本打开Windows版Python官网下载链接&#xff0c;选择Latest Python 3 Release - Python 3.8.3 。(推荐选择Python3.x&#xff0c;也可以选择其他版本)2.选择需要的Python类型在File中选择Windows x86-64 execut…

python模块:命名空间与重载模块

文章目录模块命名空间&#xff1a;重载模块&#xff1a;#module2.py print(starting to load...) import sys name42 def func():pass class klass:pass print(done loading.) >>> import module2 starting to load... done loading. >>> module2.sys <mo…

哪个html在大部分浏览器下是不隐藏的,前端浏览器兼容性问题总结

市场上浏览器种类很多&#xff0c;不同浏览器的内核也不尽相同&#xff0c;所以各个浏览器对网页的解析存在一定的差异。浏览器内核主要分为两种&#xff0c;一是渲染引擎&#xff0c;另一个是js引擎&#xff0c;内核更加倾向于说渲染引擎。常见的浏览器内核可以分四种&#xf…

多媒体分析与理解_如何设计一个出色的数字多媒体展厅?

展厅设计方案是了解每个多媒体设备的应用方法&#xff0c;那么如何让设备跟展厅结合一起&#xff0c;展示出我们想要的科技效果&#xff0c;核心就是用户体验度。今天华南数字科技的小编就为您介绍下数字多媒体展厅对用户体验方面的几个重点要素。1、细节展示不论多前卫的多媒体…

python模块:运行机制与编写方法

文章目录python模块的导入机制&#xff1a;python模块编写方法&#xff1a;#mod1: def printer(x):print(x) #mod2: print(hello) n1 #mod3: x1 y[2,3] >>> import mod1 >>> mod1.printer(hello) hello >>> from mod1 import printer >>> …

html标签a+hover事件,触发a标签hover事件,如何在元素底部显示蓝色底块_html/css_WEB-ITnose...

回复讨论(解决方案)你可以用li:hover border-bottom:3px solid blue;background-position:bottom; //是针对背景图片的位置,不是背景颜色height: 1px;//这里的高度为什么是1px?有什么目的&#xff1f;width:45px;可以采用1楼的做法&#xff0c;设置底部边框还有给你个动画效果…

微信小程序 界面从右边滑出_微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)...

本文实例讲述了微信小程序MUI侧滑导航菜单。分享给大家供大家参考&#xff0c;具体如下&#xff1a;实现的目标—-YDUI的Popup组件点击列表图标—-左侧的菜单栏显示—-点击关闭按钮或者右侧的遮罩层—-左侧菜单栏关闭实现方案1&#xff1a;左侧菜单和右侧展示页面分为上下两层w…

python函数:函数参数,常用函数工具

文章目录python函数之参数python的lambda表达式&#xff1a;函数工具&#xff1a;map&#xff0c;filter&#xff0c;reduce>>> def f(a):a99>>> b88 >>> f(b) >>> print(b) 88 >>> def ch(a,b):a2b[0]eoe>>> x1 >&g…

gradient设置上下渐变_图解CSS: CSS渐变

CSS的渐变主要分布在 conic-gradient()和repeating-conic-gradient()两个属性。在CSS中&#xff0c;CSS的渐变相当于图像&#xff0c;我们可以使用线性渐变(linear-gradient()和repeating-linear-gradient())、径向渐变(radial-gradient()和repeating-radial-gradient())和锥形…

2021泗阳致远中学高考成绩查询,2021高考成绩什么时候发布?可通过哪些途径查询?...

3、安徽省高考成绩预计将于6月23日公布各批次录取分数线和高考成绩&#xff0c;考生可通过安徽省教育招生考试院自行查分&#xff1b;4、湖南高考成绩将于6月25日左右公布&#xff0c;本科不再分一二三批&#xff0c;考生可通过湖南教育政务网、湖南省普通高校招生考试考生综合…

python函数之作用域

python函数之作用域&#xff1a; >>> def times(x,y):return x*y>>> times(2,4) 8 >>> times(3.1,4) 12.4 >>> times(eop,4) eopeopeopeop >>> def inset(s1,s2):res[]for x in s1:if x in s2:res.append(x)return res>>&…