JVM内存模型、垃圾回收机制及简单调优方式

JVM内存模型:

  1. 方法区

用来存放类加载的信息,同时存放静态属性 和 方法(静态方法和普通方法)

jdk1.7之后,取消了方法区名称,改为元空间、方法区也叫元空间也叫永久区

方法区中的数据,可以被多线程共享。访问时会有数据共享的安全问题

  1. 堆区

用来存放对象或数组的 , 也就是用来存放new关键字创建的内容

堆区中的数据,可以被多线程共享。访问时会有数据共享的安全问题

  1. 方法栈

用来存放调用方法及方法执行的过程中产生的临时数据的(临时变量,参数列表)

这些数据是以栈帧结构存入方法栈(压栈)

随着方法执行完毕,这些数据就会被销毁回收(弹栈)

栈帧分为:局部变量表, 操作数栈,返回地址,动态链接。

方法栈是线程独享的,也就是每一个线程都会有一个方法栈。

  1. 程序计数器

在线程上下文切换时,用来记录刚刚执行的行号

程序计数器也是线程独享的。

  1. 本地方法

特点与方法栈基本相同

不同点时,当调用native修饰的方法时,其产生的数据会存储在本地方法栈中。

垃圾回收机制:

GC:变量、对象等。随着程序的运行,有些对象可能不再被使用,垃圾回
收机制的任务就是识别这些无用的对象
工作原理:
标记 - 清除:通过对象之间的引用关系,遍历所有可达的对象,并对它们进行标记,垃圾回收器会从这些根对象出发,查找它们所引用的对象,然后对这些引用的对象继续查找其引用的对象,以此类推,对所有可达的对象进行标记
复制:复制算法将内存空间划分为两个大小相等的区域,只使用其中一个半区来存储活动(可达)对象。从根对象开始,垃圾回收器将可达对象复制到另一个半区,然后清空原来的半区
标记 - 整理:确定所有可达对象。然后,在整理阶段,不是简单地清除不可达对象,而是将所有可达对象向内存空间的一端移动,使它们紧凑排列,然后回收不可达对象所占用的空间。

垃圾回收机制调优:

通过调整堆内存大小来优化,用-Xms和-Xmx参数设置初始堆大小和最大堆
大小
为了优化对象生命周期,减少对象创建和销毁的频率
高并发:G1 GC

相关推荐
imDwAaY17 分钟前
程序里的地址是真实内存地址吗?从虚拟内存到地址转换
java·linux·服务器
承渊政道29 分钟前
【Python编程—从入门到实践】(让程序记得、恢复并解释失败:Python 文件、异常与JSON系统教程)
开发语言·python·pycharm·json·异常处理
秋饼32 分钟前
Claude Haiku 5.5 + Spring AI 2.0 企业级低成本高并发 AI Agent 实战:子智能体分工、成本熔断与百万上下文落地
java·ai·技术分享·后端开发
一水鉴天42 分钟前
声调韵的序:从古汉语音韵到系统科学语言的场效应推演 20261013(千问)
开发语言·人工智能
郭庆汝42 分钟前
(六)MCP+A2A之——Playwright与BrowserUse:让AI学会像人类一样使用浏览器
开发语言·python
xuxigifxfh1 小时前
牛客:BISHI8 大整数哈希
java·算法·哈希算法
涉密IT资质笔记1 小时前
涉密资质投入产出分析模型:时间成本、四块成本构成与 ROI 决策框架
java·开发语言·算法
木井巳1 小时前
【BFS 解决拓扑排序】火星词典
java·算法·leetcode·广度优先·宽度优先·图搜索算法
霸道流氓气质1 小时前
Java调用StableDiffusion/ComfyUI图像生成:DAG工作流编排、WebSocket实时进度与Flux模型集成的生产级实战
java·websocket·stable diffusion
北风toto1 小时前
KMP 算法详解:从暴力匹配到 O(n+m) 的字符串搜索
java·开发语言·算法