JVM技术之旅-有几种情况对象直接进入Old区

推荐资源汇总

自由只存在于束缚之中,没有堤岸,哪里来江河? —— 金斯伯格

  • JVM的堆内存中分为年轻代与老年代,年轻代又分为Eden区与Survivor区
  • 新对象的创建会分配在年轻代,对象何时进入老年代呢?又有什么样的对象适合放在老年代呢?
  • JVM实现的自动内存管理主要是针对对象内存的回收和对象内存的分配
  • *了解对象何时进入老年代有利于我们合理分配堆内存,减少FullGC的发生。

目前主流的垃圾收集器都会采用分代回收算法,因此,新创建的对象都会优先分派在新生代的Eden区内,在新生代中为了防止内存碎片问题,因此垃圾收集器一般都选用"复制"算法。

堆内存的新生代分为:Eden区+Survior1区+Survior2区

📕📕 内存分配流程 📕📕

在对象的对象头信息中存储着对象的迭代年龄(MaxTenuringThreshold),迭代年龄会在每次 YoungGC之后对象的移区操作中增加, 每执行一次MiniorGC。当这个年龄大于到 15(默认) 之后, 这个对象将会被移入老年代.

可以通过这个参数设置这个年龄值

- XX:MaxTenuringThreshold
  • 当首次加载分配大对象空间而发生YoungGC的时候:会进行初始化PretenureThresSizehold这个值的。
  • PretenureThresSizehold=N,有一些占用大量连续内存空间的对象在被分配内存开始就会直接进入老年代这样的大对象一般是一些数组,长字符串之类的对象

我们可以通过这个参数设置大对象,这个限额的大小:

- XX:PretenureSizeThreshold

注意:此参数只对Serial及ParNew两款收集器有效

  • *若Survior(to)区剩余内存太少,导致对象无法放入该区域时,就会启用"分配担保",将多出的数据对象直接存转移到老年代/或者直接放入老年代,然后清空Eden区和Survior(from)区

  • 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升到老年代, 如果在Survivor区中相同年龄(设年龄为age)的对象的所有大小之和超过Survivor空间的一半,年龄大于或等于该年龄(age)的对象就可以直接进入老年代,无需等到 MaxTenuringThreshold中要求的年龄

📕📕 强引用 📕📕

平常的代码创建对象都属于强引用,之后当对象变为垃圾对象才会被回收。

📕📕 软引用 📕📕

被SoftReference这个类包裹起来的对象,在进行垃圾收集发现剩余空间不够的时候,全部已创建软引用对象会被一次性回收,这种引用类型常用于对内存比较敏感的缓存中

📕📕 弱引用 📕📕

被WeakReference这个类包裹起来的对象,每次进行垃圾收集操作的时候都会将弱引用对象一次性回收,基本不使用

📕📕 虚引用📕📕

plantomReference又称幽灵引用,随时都会被回收

📕📕 未确认-对象动态年龄判断 📕📕

此策略发生在Survivor区,当Survivor区中的一批对象的总大小大于Survivor区空间大小的一半,在这个区域中,对象年龄大于这批对象的最大年龄的所有对象会被移入老年代.

  • 策略一:将可能长期存活的对象直接放入老年代
  • 策略二:避免移区时的复制操作浪费资源
  • 策略三:不能将还有引用的对象当做垃圾回收掉
  • *策略四:将可能长期存活的对象直接放入老年代

观察这几条策略并结合GC区别我们可以发现一些端倪

  • 不应放入长期对象与较大对象占用空间
  • 存活时间短的对象应让其在年轻代存活直至死亡
  • 因为这些对象放入老年代后很快死亡,又不能及时回收,造成内存浪费,更快的触发FullGC

因此在程序运行过程中,合理设置参数,使一些可能长期存活的框架对象与缓存对象,一些大对象应放入老年代

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

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

相关文章

心电信号时域特征分析与Python实现

目录 1 引言 2 心电信号时域特征的含义 3 Python实现心电信号时域特征提取 4 结论 1 引言 心电信号是由心脏电活动引起的电信号

python调用pytorch的clip模型时报错

使用python调用pytorch中的clip模型时报错:AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…

java读写ini文件

java读写ini文件 1、格式 INI文件由节、键、值组成。 节 [section] 参数 (键值) namevalue 例: [Total] num1 [Server] ip127.0.0.1 2、代码封装 import org.apache.commons.configuration.ConfigurationException; import org.apache.common…

Linux系统Redis的主从架构配置

Linux系统Redis的主从架构配置 此处基于 Linux系统Redis的单机安装步骤 进行主从架构的搭建 此案例在一台虚拟机上启动6379和6380两个reids实例;6379为主节点,6380为从节点;6380实例会从6379复制数据; 先复制一份单机版的reids.co…

乍得ECTN(BESC)申请流程

根据TCHAD/CHAD乍得法令,自2013年4月1日起,所有运至乍得的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请,将被视为触犯乍得的条例,并在目的地受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称;…

基于Java+SpringBoot+Vue的人事管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Ubuntu 传输文件方法

Ubuntu 传输文件方法 文章目录 Ubuntu 传输文件方法1 scpusage跨越跳板机传输 2 rsync(remote sync)特性installusage本地拷贝同步将文件从远程机器复制到本地机器将文件从本地机器复制到远程机器通过ssh使用rsync 3 SSHFSusage通过 SSHFS 从远程系统访问…

深挖 Threads App 帖子布局,我进一步加深了对CSS网格布局的理解

当我遇到一个新产品时,我首先想到的是他们如何实现CSS。当我遇到Meta的Threads时也不例外。我很快就探索了移动应用程序,并注意到我可以在网页上预览公共帖子。 这为我提供了一个深入挖掘的机会。我发现了一些有趣的发现,我将在本文中讨论。 …

使用node.js 搭建一个简单的HelloWorld Web项目

文档结构 config.ini #将本文件放置于natapp同级目录 程序将读取 [default] 段 #在命令行参数模式如 natapp -authtokenxxx 等相同参数将会覆盖掉此配置 #命令行参数 -config 可以指定任意config.ini文件 [default] authtokencc83c08d73357802 #对应一条隧…

算法-岛屿数量

给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边…

LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…

python高阶技巧

目录 设计模式 单例模式 具体用法 工厂模式 优点 闭包 案例 修改闭包外部变量 闭包优缺点 装饰器 装饰器原理 装饰器写法 递归 递归的调用过程 递归的优缺点 用递归计算阶乘 设计模式 含义:设计模式是一种编程套路,通过这种编程套路可…

AQL品质抽样标准

AQL抽样标准 - 百度文库 Acceptance Quality Limit 接收质量限的缩写,即当一个连续系列批被提交验收时,可允许的最差过程平均质量水平。 AQL普遍应用于各行业产品的质量检验,不同的AQL标准应用于不同物质的检验上。在AQL 抽样时,…

【开源三方库】Aki:一行代码极简体验JSC++跨语言交互

开源项目 OpenHarmony 是每个人的 OpenHarmony 一、简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性&#x…

SpringBoot开发环境热部署

目录 开发热部署 添加dev-tools依赖 在application.properties中配置devtools 在IDEA中添加设置 开发热部署 在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译、 重新启动,整个过程非常麻烦,影响开发…

KVM介绍和部署

介绍 kvm 是基于Linux内核的虚拟机,而KVM 是当前最主流的开源的服务器虚拟化技术。 kvm的三种模式如下: 客户模式(Guest Mode)用户模式(User Mode) 运行QUME,实现 IO 模拟与管理内核模式(Ker…

STM32 低功耗-待机模式

STM32 待机模式 文章目录 STM32 待机模式第1章 低功耗模式简介第2章 待机模式简介2.1 进入待机模式2.1 退出待机模式 第3章 待机模式代码部分总结 第1章 低功耗模式简介 在 STM32 的正常工作中,具有四种工作模式:运行、睡眠、停止和待机模式。 在系统或…

Vue中计算属性的使用

使用成绩需求来实现 详细的代码示例(主要练习 Vue 简单的计算属性) 需求功能技术点 渲染功能: 不及格高亮、使用v-if v-else结局盒子互斥,使用v-bind:class解决高亮。 删除功能:点击传递id ,通过filter过…

【Spring Cloud 六】Hystrix熔断

这里写目录标题 系列文章目录背景一、Hystrix是什么服务雪崩服务容错的相关概念熔断器降级超时控制限流 二、会什么要有Hystrix三、如何使用Hystrix进行熔断处理整体项目代码服务提供者pom文件yml配置文件启动类controller 服务消费者pom文件yml配置文件启动类feignhystrixcont…

lodash集合函数sortby和orderby区别

对比 sortby 稳定排序,可保留集合序列原始顺序仅仅支持升序,无排序方向,不支持降序,如果需要降序则需要额外调用 reverse() 函数支持多字段排序 orderby 稳定排序,可保留集合序列原始顺序支持指定升序和降序的排序…