第3篇:JVM中内存分配及回收策略

2023-10-30

一、分配原理

当执行创建对象操作时,首先进行逃逸分析(其实就是该对象是否会被外部方法所引用(就是作用域),若不会则进行标量替换(就是对象中成员变量是基本数据类型的在栈帧/寄存器中进行创建),可以分担堆内存压力,毕竟出栈就会销毁);若逃逸分析不通过则进行大对象(参数:“-XX:PretenureSizeThreshold”)判断;若判断通过则直接进入老年代,若不通过则进行TLAB(Thread Local Allocation Buffer,即线程本地分配缓存区,就是向eden区申请一块很小的内存空间(线程私有的)来存放对象),若大小足够存放该对象则存放,若不够则直接在eden区中进行创建;当eden区满后,会进行Minor GC,存活对象会进入Survivor区,其他对象会由垃圾回收线程进行回收;判断对象年龄是否等于15(默认值为15,设置参数“-XX:MaxTenuringThreshold”),或者当前存放存活对象的Survivor区域的年龄1+年龄2+。。。+年龄n>Survivor内存大小的50%,则对象直接进入老年代。

二、原理图

在这里插入图片描述

小结

原理中涉及的知识点有:

  1. 逃逸分析;
  2. 对象优先在Eden区分配;
  3. 大对象直接进入老年代;
  4. 长期存活的对象将进入老年代;
  5. 动态对象年龄判断;
  6. 空间分配担保。

内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素之一,虚拟机之所以提供多种不同的收集器以及大量的调节参数,是因为只有根据实际应用需求,实现方式选择最优的收集方式才能获取最高的性能。没有固定收集器、参数组合,也没有最优的调优方法,虚拟机也就没有什么必然的内存回收行为。因此,学习虚拟机内存知识,如果要到实践调优阶段,那么必须了解每个具体收集器的行为、优势和劣势、调节参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第3篇:JVM中内存分配及回收策略 的相关文章

  • 为什么在使用 repaint() 而不是使用 getParent().repaint() 时会出现此 Swing 错误?

    这个问题是基于我不久前在一个简单的 Swing 骰子程序中遇到的问题 我发布的原始问题是here https stackoverflow com questions 22306637 mystery concurrency componen
  • TestNG 启动期间发生内部错误

    我创建了一个 TestNG 类 FirstTest java 当我将测试用例作为 TestNG Test 运行时 出现以下错误 期间发生内部错误 启动 FirstTest java lang NullPointerException Ecl
  • Criteria eager fetch-joined 集合以避免 n+1 选择

    假设 Item 和 Bid 是实体 一个 Item 有多个 Bid 它们被映射到休眠在典型的父子关系中
  • Spring boot 404错误自定义错误响应ReST

    我正在使用 Spring boot 来托管 REST API 即使浏览器正在访问 URL 以及自定义数据结构 我也希望始终发送 JSON 响应 而不是使用标准错误响应 我可以使用 ControllerAdvice 和 ExceptionHa
  • Java:BufferedInputStream 的 available() 方法存在问题

    我正在处理以下代码 用于将大文件拆分为一组较小的文件 FileInputStream input new FileInputStream this fileToSplit BufferedInputStream iBuff new Buff
  • 如何加载椭圆曲线 PEM 编码的私钥? [复制]

    这个问题在这里已经有答案了 我使用 OpenSSL 生成了椭圆曲线私钥 公钥对 私钥和公钥均采用 PEM 编码 我已经弄清楚如何加载公钥 感谢this https stackoverflow com a 40439081但是 我无法弄清楚如
  • 平衡括号问题的优化解

    给定一个仅包含字符的字符串 and 判断输入字符串是否有效 输入字符串在以下情况下有效 左括号必须由相同类型的括号封闭 左括号必须按正确的顺序关闭 请注意 空字符串也被视为有效 示例1 Input Output true Example 2
  • AES BadPaddingException

    如果我使用错误的密钥或错误的盐进行解密 则会引发 BadPaddingException 我希望返回一个不正确的字符串 doFinal 导致解密方法出现异常 信息 This is just an example Unfug S F V s
  • Java 中的 TreeSet 与 C#.net 的等效项

    我有 Java 代码 其中包含TreeSet 我想将代码转换为 C 我可以使用哪个等效集合 如果没有 请提出替代方案 那将是系统 集合 通用 SortedSet
  • JSF 错误 - IllegalStateException:PWC3999:提交响应后无法创建会话[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 正在构建一个使用 Facelet 创建的应用程序 这是我的模板master xhtml
  • 使用 Thymeleaf 时我们应该删除 HTML 属性吗?

    我正在研究 Thymeleaf 发现几乎所有示例中都有 Thymeleaf 的标签值以及标准 HTML 值 例如 这些
  • Knuth-Morris-Pratt 算法

    解决方案是Knuth Morris Pratt 算法 https en wikipedia org wiki Knuth E2 80 93Morris E2 80 93Pratt algorithm 干草堆 AAAAAAAAA 针 AAA
  • 大型 XML 的 XML 节点到字符串转换

    到目前为止我一直在使用DOM源在我的 Android 应用程序中将 XML 文件转换为字符串 这是我的代码 public String convertElementToString Node element throws Transform
  • 如何在开头时解析 json 文件

    我想解析以下 JSON 文件 但以 向我表明这是一个数组 然后继续 对象 我当前的解析器返回一个 JSON 对象 我的问题是 如何修改解析器来解析这个文件 这样解析器将为我提供其他 JSON 文件 从对象或排列开始 JSON 文件 codi
  • Android 以编程方式停止 toast 通知?

    有没有办法以编程方式停止 Toast 消息 假设我有一个按钮 单击它可以滚动 toast 消息 并且在 onclick 事件中我想停止队列中的所有消息并只显示新消息 我该怎么做 我的代码的简化版本如下 代码 public class Hel
  • 为什么我的 Java 路径中添加了“L”?

    我在我的类路径中加载了一个 jar 在 iReport 中 如果重要的话 我确信它具有所需的方法 但是当我尝试测试连接 从而调用该 jar 时 我得到一个 java lang NoSuchMethodError 说它正在引用班上 Lorg
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • Java分数计算器

    我对 Java 编程还很陌生 我的 AP 计算机编程课程有作业要完成 所以请耐心等待 我必须弄清楚如何将两个分数相乘 我想知道是否有任何方法可以在方法内部声明变量并在该方法外部使用它 我在介绍方法中的 while 循环 谢谢您 希望这不会令
  • selenium 没有找到合适的方法,直到(ExpectedCondition)

    这是有线的问题 我导入的项目运行 100 几个月前 今天我已将其与依赖项一起导入 但存在问题WebDriverWait 这是我的代码 WebDriverWait driverWait new WebDriverWait driver 100

随机推荐

  • 数据挖掘——无监督学习

    一 概述 无监督学习算法 让计算机自己学习 没有属性或者标签 有监督学习算法 每个样本都已经被标明 我们已经被告知了学习的答案 无监督学习的典型算法是聚类算法和降维 二 聚类算法 1 概念 聚类分析 将数据对象分组成为多个蔟 同一簇中的对象
  • [VMware]解决"已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作"的问题

    创建好空的虚拟机后使用ISO镜像文件后重启进行安装系统 出现下图问题 原因 是BIOS未开启虚拟化技术 之前个人用的电脑是默认开启了 现在换到公司联想的电脑上安装虚拟机发现了这个问题 解决方式 虚拟化技术目前主要依赖于电脑的CPU型号及BI
  • wireshark 本地连接无数据 抓不到网卡解决方法

    问题描述 环境 win7 wireshark 3 4 6 不知道我之前做了啥 突然wireshark抓不到数据了 过滤的网卡选择哪个接口都不行 捕获选项如下图 做过以下尝试都不行 在cmd中打开抓包服务 net start npf 软件卸载
  • arm64-v8a编译

    环境 Ubuntu64和android ndk r11c 其他不支持arm64 v8a架构 重点 依赖库要使用android ndk r11c编译成arm64 v8a 其中ffmpeg最复杂 编译方法如下 1 ffmpeg编译 目录建立 创
  • 线程池源码(一)

    一 ThreadPoolExecutor执行流程 二 ThreadPoolExecutor状态 线程池中核心属性 ctl ctl本质就是一个int类型的数值 private final AtomicInteger ctl new Atomi
  • 【Python VTK】读取二维序列医学图像分割结果并进行三维重建

    一 问题描述 最近在开发过程中遇到了这样的问题 在医学图像开发过程中 我们将医学图像通过深度学习算法进行分割 现在想要通过这一套二维图像进行三维重构 以下是分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核
  • 73-C语言-计算闹钟的时间

    问题 已知现在的小时和分钟 即几点几分 并想要睡觉的时间 单位为min 求闹钟应在几点响 思路 先输入现在准备睡觉的几点几分 以及睡觉的总时长 在看问题最后求的是什么 是到时候 闹钟几点响 而闹钟的设置 先看范围 小时不能超过24小时 分钟
  • Counterfactual Zero-Shot and Open-Set Visual Recognition (CVPR2021)

    这是南洋理工张含望老师组的作品 这篇文章从因果推理出发 来根据反事实推断设计模型 出发点非常的新颖 但不容易懂 因果推理理论是一个非常不错的帮助人换角度看问题的理论工具 多多学习 文章全名叫 Counterfactual Zero Shot
  • Linux的视窗系统总结:初认识《一》

    X window Wayland DirectFB linuxfb的区别 在QT中 真正关心硬件操作的是图形引擎层 图形引擎实现方式在linux上有多个 1 通过X11 2 DFB directFB 3 LinuxFB 其中桌面PC的QT版
  • Django中的Cookie与Session

    Cookie 设置cookie 使用response对象set cookie 获取cookie 用request对象 测试 成功获取到了上一步所添加的cookie Session 一般做项目的时候Session会存到redis中 djang
  • matlab实现简单清浊音检测

    清浊音检测原理公式 清浊音检测是在一段语音信号中区分出清音段 浊音段和静音段 原理框图如下所示 1 过零率 2 对数能量 3 单位延迟自相关系数归一化 4 lpc系数 使用Leveson Durbin算法求得 取 a2 a3 aM的值即为L
  • Java基础——根类与String类

    转眼间我们已经工作完一周了 这周开始阿Q要不定时更新知识了 先让我们来学习一下java中的Object与string类吧 Object类 API Application Programming Interface 应用程序编程接口 Java
  • 给定一个整数,判断它能否被3,5,7整除,并输出以下信息:1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);2、只能被其中两个数整除(输出两个数,小的在前,大的在后。

    24 int a 25 printf 请输入一个数 26 scanf d a 27 if a 3 0 28 printf 3 29 if a 5 0 30 printf 5 31 if a 7 0 32 printf 7 33 else 3
  • 模拟客户端和服务端

    import org junit jupiter api Test import java io import java net InetAddress import java net ServerSocket import java ne
  • spirng-Alibaba的介绍和导入

    3 spirng Alibaba 3 1spirng Alibaba概述和导入依赖 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 4hqZgDfQ 1637066858419 https static01 im
  • 使用Python、OpenCV,ImageMagick工具箱根据原始视频制作GIF动画

    使用Python OpenCV ImageMagick工具箱根据原始视频制作GIF动画 python读取原始视频流每一帧 并生成照片保存到本地文件夹 读取本地文件夹图片 根据图片名排序 支持根据帧率过滤 指定最大多少帧照片去生成gif 调用
  • 剑指 Offer 62. 圆圈中最后剩下的数字 <约瑟夫环>

    看了诸多大神的解题还是有点不明白 故记录一下 如题 0 1 n 1这n个数字排成一个圆圈 从数字0开始 每次从这个圆圈里删除第m个数字 删除后从下一个数字开始计数 求出这个圆圈里剩下的最后一个数字 方法一 递归 数学 递归 class So
  • SpringBoot(13)过滤器+拦截器+监听器

    文章目录 一 过滤器 1 过滤器介绍 2 Filter生命周期 4 注解方式实现过滤器 WebFilter WebFilter Order 1 ServletComponentScan 启动类代码 Filter代码 5 直接注入到sprin
  • shell巡检脚本

    巡检主机系统版本 centos7 编程需求 日常巡检是每一个运维必须要做的事情 如果能用脚本实现的话 那将大大简化巡检的工作难度 root localhost shell vim sys check sh bin bash 第一部分 系统信
  • 第3篇:JVM中内存分配及回收策略

    文章目录 一 分配原理 二 原理图 小结 一 分配原理 当执行创建对象操作时 首先进行逃逸分析 其实就是该对象是否会被外部方法所引用 就是作用域 若不会则进行标量替换 就是对象中成员变量是基本数据类型的在栈帧 寄存器中进行创建 可以分担堆内