第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中内存分配及回收策略 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

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

    一 概述 无监督学习算法 让计算机自己学习 没有属性或者标签 有监督学习算法 每个样本都已经被标明 我们已经被告知了学习的答案 无监督学习的典型算法是聚类算法和降维 二 聚类算法 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中内存分配及回收策略

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