当前位置: 首页 > news >正文

JVM内存分配与垃圾收集流程

在这里插入图片描述

在这里插入图片描述

3.8 实战:内存分配与回收策略

3.8.1 对象优先在Eden分配

大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC

3.8.2 大对象直接进入老年代

HotSpot虚拟机提供了-XX:PretenureSizeThreshold参数,指定大于该设置值的对象直接在老年代分配,这样做的目的就是避免在Eden区及两个Survivor区之间来回复制,产生大量的内存复制操作。
[Ref] -XX:PretenureSizeThreshold

[Q&A] 什么是大对象?

大对象就是指需要大量连续内存空间的Java对象,最典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组

3.8.3 长期存活的对象将进入老年代

虚拟机给每个对象定义了一个对象年龄(Age)计数器,存储在对象头中。对象通常在Eden区里诞生,如果经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,该对象会被移动到Survivor空间中,并且将其对象年龄设为1岁。对象在Survivor区中每熬过一次Minor GC,年龄就增加1岁,当它的年龄增加到一定程度(默认为15),就会被晋升到老年代中。对象晋升老年代的年龄阈值,可以通过参数-XX:MaxTenuringThreshold设置。
[Ref] -XX:MaxTenuringThreshold,XX:+PrintTenuringDistribution

3.8.4 动态对象年龄判定

-XX:TargetSurvivorRatio
Survivor 区中相同年龄的所有对象的空间总和大于 Survivor 区空间的一半,则年龄大于或等于该年龄的对象直接进入老年代。

3.8.5 空间分配担保

在发生 Minor GC 之前,虚拟机会先检查老年代最大可用的连续空间, 只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小,就会进行 Minor GC,否则将进行 Full GC。

-----------------------------------------------------------------------------读书笔记摘自 书名:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)作者:周志明

http://www.lryc.cn/news/308873.html

相关文章:

  • 【python】yaml转成json
  • css5定位
  • 【解决】修改 UI界面渲染层级 的常见误区
  • 蓝桥杯练习系统(算法训练)ALGO-995 24点
  • 汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)
  • 高级RAG:揭秘PDF解析
  • Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)
  • 【C语言】指针初阶2.0版本
  • 小红书关键词爬虫
  • 网络爬虫的危害,如何有效的防止非法利用
  • 2024/2/29 备战蓝桥杯 6-1 二分
  • 浅析ARMv8体系结构:原子操作
  • 综合练习(二)
  • sql-labs第46关(order by盲注脚本)
  • 13款可以轻松上手画图软件推荐
  • vue实现商品评分效果(通过插件实现)
  • SpringBoot 手写 Starter
  • C++ 学习笔记(Structured bindings)
  • K8S常用kubectl命令汇总(持续更新中)
  • 加密和签名的区别及应用场景
  • 双非二本找实习前的准备day3
  • 又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)
  • 勒索病毒普通用户防范建议
  • Zabbix“专家坐诊”第231期问答
  • 【.NET Core】深入理解IO - FileSteam流
  • CentOS7 Mysql 忘记密码或临时密码进不去时怎么跳过密码进去然后再更改密码
  • 深度学习 精选笔记(8)梯度消失和梯度爆炸
  • linux操作docker
  • k8s Pod 进阶(资源限制,健康检查探针详解,启动退出,pod生命周期,)
  • SpringBoot整合ActiveMQ步骤