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

JVM内存模型:

  1. 方法区

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

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

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

  1. 堆区

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

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

  1. 方法栈

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

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

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

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

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

  1. 程序计数器

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

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

  1. 本地方法

特点与方法栈基本相同

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

垃圾回收机制:

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

垃圾回收机制调优:

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

相关推荐
逝水无殇1 小时前
C# 异常处理详解
开发语言·后端·c#
懒鸟一枚2 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
玖玥拾3 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾3 小时前
Rust 学习目录
开发语言·学习·rust
我命由我123453 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
云泽8084 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦4 小时前
GO---可见性规则
开发语言·golang
逝水无殇4 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子5 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript