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

JVM内存模型:

  1. 方法区

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

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

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

  1. 堆区

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

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

  1. 方法栈

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

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

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

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

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

  1. 程序计数器

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

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

  1. 本地方法

特点与方法栈基本相同

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

垃圾回收机制:

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

垃圾回收机制调优:

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

相关推荐
num_killer3 小时前
小白的Langchain学习
java·python·学习·langchain
你怎么知道我是队长4 小时前
C语言---头文件
c语言·开发语言
期待のcode4 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐4 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
hqwest4 小时前
码上通QT实战25--报警页面01-报警布局设计
开发语言·qt·qwidget·ui设计·qt布局控件
a程序小傲4 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红4 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥4 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
HellowAmy4 小时前
我的C++规范 - 玩一个小游戏
开发语言·c++·代码规范
小楼v4 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法