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

JVM内存模型:

  1. 方法区

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

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

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

  1. 堆区

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

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

  1. 方法栈

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

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

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

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

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

  1. 程序计数器

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

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

  1. 本地方法

特点与方法栈基本相同

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

垃圾回收机制:

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

垃圾回收机制调优:

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

相关推荐
帅气的你3 分钟前
Spring Boot 集成 AOP 实现日志记录与接口权限校验
java·spring boot
无限进步_22 分钟前
【数据结构&C语言】对称二叉树的递归之美:镜像世界的探索
c语言·开发语言·数据结构·c++·算法·github·visual studio
peixiuhui23 分钟前
Iotgateway技术手册-2. 技术栈
jvm
zhglhy23 分钟前
Spring Data Slice使用指南
java·spring
CSDN_RTKLIB34 分钟前
C++取模与取余
开发语言·c++
win x35 分钟前
Redis 主从复制
java·数据库·redis
星河耀银海1 小时前
C++开发入门——环境搭建与第一个程序
开发语言·c++·策略模式
weixin_423995001 小时前
unity 处理图片:截图,下载,保存
java·unity·游戏引擎
还不秃顶的计科生1 小时前
defaultdict讲解
开发语言·javascript·ecmascript
帅气的你1 小时前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式