jvm中各个参数的理解

news/2025/2/21 5:20:50

MEMORY - MANAGERS

定义

MEMORY - MANAGERS即内存管理器,它是操作系统或软件系统中负责管理计算机内存资源的组件。从本质上来说,它是一种软件机制,旨在协调计算机系统中内存的分配、使用和回收等操作,确保系统能够高效、稳定地运行。

作用

  1. 内存分配

    • 合理分配资源:根据不同程序或进程的需求,为它们分配适当大小的内存空间。比如,当用户打开一个浏览器时,内存管理器会为浏览器进程分配一定的内存,使其能够正常加载和运行各种网页、插件等。
    • 多任务支持:在多任务操作系统中,多个程序可能同时运行,内存管理器需要协调这些程序对内存的需求,确保每个程序都能获得足够的内存来执行任务。例如,在同时打开办公软件、音乐播放器和聊天工具时,内存管理器会合理分配内存给这些程序,让它们都能稳定运行。
  2. 内存回收

    • 释放闲置内存:当一个程序或进程不再需要使用某些内存时,内存管理器会将这些内存回收,以便重新分配给其他需要的程序。比如,当用户关闭一个文档处理软件后,内存管理器会回收该软件占用的内存空间。
    • 避免内存泄漏:持续监控内存的使用情况,及时发现并处理内存泄漏问题。内存泄漏是指程序在运行过程中,由于某些原因导致部分内存无法被释放,长期积累会导致系统内存不足。内存管理器可以通过定期检查和清理无效的内存占用,来避免这种情况的发生。
  3. 内存保护

    • 隔离不同进程:确保不同的程序或进程之间的内存空间相互隔离,防止一个程序意外地访问或修改其他程序的内存数据。例如,在一个多用户的操作系统中,每个用户的程序都有自己独立的内存空间,内存管理器会保证这些空间不会相互干扰。
    • 防止非法访问:对内存的访问进行权限控制,只有经过授权的程序才能访问特定的内存区域。这有助于提高系统的安全性,防止恶意程序通过非法访问内存来获取敏感信息或破坏系统。
  4. 内存虚拟

    • 扩展物理内存:通过虚拟内存技术,将硬盘上的一部分空间模拟成内存使用,从而扩展系统的可用内存。当物理内存不足时,内存管理器会将暂时不使用的程序数据和代码从物理内存转移到硬盘上的虚拟内存中,为需要的程序腾出物理内存空间。
    • 提供统一的内存视图:为程序提供一个统一的、连续的虚拟内存地址空间,而无需关心物理内存的实际布局和分配情况。这使得程序的开发和运行更加方便,提高了程序的可移植性和兼容性

JVM内存管理参数解析

以下是Java虚拟机(JVM)中与内存管理相关的关键参数及其作用解释,基于G1垃圾回收器的内存划分:


1. CodeCacheManager & CodeCache

CodeCache:存储JIT编译器生成的本地机器代码(热点方法编译后的二进制指令)2。

CodeCacheManager:负责管理CodeCache区域的分配和回收,防止代码缓存溢出导致性能下降。


2. Metaspace Manager & Metaspace

Metaspace:取代JDK8之前的永久代(PermGen),用于存储类元数据(如类结构、方法信息、字段描述符等)5。

Metaspace Manager:动态调整Metaspace大小,自动从操作系统申请或释放内存,避免OutOfMemoryError: Metaspace

Compressed Class Space:当启用压缩指针(-XX:+UseCompressedOops)时,独立存储类指针的压缩空间,减少内存占用5。


3. G1 Young Generation

G1 Eden Space:年轻代中的对象初始分配区域,新创建的对象首先分配在此处。当Eden满时触发Minor GC。

G1 Survivor Space:保存Minor GC后存活的对象,分为两个区(S0/S1),用于年龄计数和晋升筛选。

触发逻辑:对象在Survivor区经历多次GC后(默认15次),晋升到老年代。


4. G1 Old Generation (G1 Old Gen)

G1 Old Gen:存储长期存活的对象大对象(如直接分配的大数组),采用并发标记-清除算法回收。

与年轻代的关系

晋升机制:年轻代对象超过年龄阈值后移至老年代。

混合回收(Mixed GC):G1会同时回收年轻代和老年代Region,优先处理垃圾比例高的区域。

对Eden,Survivor,Old Gen的理解

JVM(PART II)Eden Survivor名称由来_eden survivors-CSDN博客

年轻代与年老代定义与理解

年轻代与年老代的定义

  1. 年轻代(Young Generation)
    • 区域组成:由Eden区和两个Survivor区(S0、S1)组成24。
    • 对象分配:新创建的对象首先分配在Eden区,经过Minor GC存活的对象会被复制到Survivor区。
    • 晋升规则:对象在年轻代经历多次GC后(默认15次,由-XX:MaxTenuringThreshold控制),会晋升到年老代36。
  2. 年老代(Old Generation)
    • 存储对象:长期存活的对象、大对象(直接分配)、Survivor区晋升的对象56。
    • 回收触发:当老年代空间不足或达到特定阈值(如CMS的92%)时触发回收16。

G1优先回收年轻代的原因

  1. 设计目标与回收效率
    • 目标:G1的核心目标是减少停顿时间(通过-XX:MaxGCPauseMillis设定),而年轻代回收(YGC)通常处理较小区域(Eden+Survivor),耗时更短15。
    • 存活率差异:年轻代对象存活率低(约90%新对象快速死亡),回收效率高;年老代对象存活率高,回收成本大27。
  2. 内存分配与回收策略
    • Eden区快速填满:程序运行时会频繁分配新对象到Eden区,导致年轻代更快触发GC24。
    • 晋升压力控制:优先回收年轻代可减少对象晋升到老年代的频率,避免老年代过早耗尽36。
  3. 混合回收的优化逻辑
    • 阶段整合:G1在年轻代GC时会并行执行初始标记(Initial Mark),为后续老年代并发标记阶段做准备,提升整体效率13。
    • 动态区域选择:G1根据Region的回收价值(垃圾比例)选择回收目标,年轻代Region通常垃圾比例更高,优先回收收益更大57。

G1中年轻代与年老代回收的协作

  • 年轻代GC触发:当Eden区满时,触发YGC,采用复制算法清理并整理内存24。
  • 混合回收(Mixed GC):当堆占用率达到阈值(默认45%),G1会同时回收年轻代和部分老年代Region,平衡停顿时间和吞吐量35。
  • Full GC兜底:若混合回收后仍无法满足内存需求,触发Full GC(单线程STW),此时会全面处理老年代6。


http://www.niftyadmin.cn/n/5860199.html

相关文章

实时股票行情接口与WebSocket行情接口的应用

实时股票行情接口与WebSocket行情接口的应用 实时股票行情接口是量化交易和投资决策的核心工具之一,行情接口的种类和功能也在不断扩展。介绍几种常见的行情接口,包括实时股票行情接口、Level2行情接口、WebSocket行情接口以及量化行情接口,…

tailwindcss 前端 css 框架 无需写css 快速构建页面

版本:VUE3 TS 框架 vite 文章中使用tailwindcss 版本: ^3.4.17 简介: Tailwind CSS 一个CSS 框架,提供组件化的样式,直接在HTML 中编写样式,无需额外自定义CSS ,快速! 简洁&#…

使用vscode调试transformers源码

简要介绍如何使用vscode调试transformers源码 以源码的方式安装transformers(官方手册为Editable install) 优先参考官方手册 git clone https://github.com/huggingface/transformers.git cd transformers pip install -e .以下展示transformers/exa…

Jenkins 配置 Credentials 凭证

Jenkins 配置 Credentials 凭证 一、创建凭证 Dashboard -> Manage Jenkins -> Manage Credentials 在 Domain 列随便点击一个 (global) 二、添加 凭证 点击左侧 Add Credentials 四、填写凭证 Kind:凭证类型 Username with password: 配置 用…

Mac (M1) 本地使用DockerDesktop 安装Kafka,SpringBoot整合Kafka

因为Kafka依赖zookeeper的所以安装Kafka必须要安装zookeeper 1、使用终端拉取zookeeper镜像 docker pull docker.1ms.run/bitnami/zookeeper2、使用终端拉取Kafka镜像 docker pull docker.1ms.run/bitnami/kafka镜像下载成功后在docker desktop中就可以看到刚刚下载的镜像 3…

解决webpack5.54打包图片及图标的问题

解决webpack5.54打包图片及图标的问题 问题描述分析原因解决方法一、loader的解决方法使用 Asset Modules 可以接收并加载任何文件,然后将其输出到构建目录。这就是说,我们可以将它们用于任何类型的文件,包括图片和字体。但未能设定指定目录&…

React进阶之前端业务Hooks库(一)

前端业务Hooks库 项目结构实现useToggleuseToggle/index.ts单测packages/hooks/src/\_test_/index.test.tspackages/hooks/src/useToggle/\_tests_/index.test.ts打包实现gulp打包gulpfiles.js根目录/gulpfile.jswebpack打包webpack.config.jspackages/hooks/package.json使用e…

图论 之 BFS

文章目录 3243.新增道路查询后的最短距离1311.获取你好友已观看的视频 BFS:广度优先搜索(BFS) 是一种常用的算法,通常用于解决图或树的遍历问题,尤其是寻找最短路径或层级遍历的场景。BFS 的核心思想是使用队列(FIFO 数…