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

JVM内存模型:

  1. 方法区

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

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

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

  1. 堆区

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

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

  1. 方法栈

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

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

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

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

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

  1. 程序计数器

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

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

  1. 本地方法

特点与方法栈基本相同

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

垃圾回收机制:

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

垃圾回收机制调优:

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

相关推荐
z小天才b1 分钟前
Java 设计模式完全指南:从入门到精通
java·开发语言·设计模式
zs宝来了6 分钟前
网络篇15-网络收发包应用之iptable
开发语言·网络·php
烤麻辣烫6 分钟前
算法--二分搜索
java·开发语言·学习·算法·intellij-idea
编码浪子8 分钟前
《安全 Rust 的边界在哪?》— 中文解读
开发语言·安全·rust
2401_8330336213 分钟前
c++如何实现简单的文件签名验证_HMAC-SHA1算法应用【进阶】
jvm·数据库·python
逍遥德18 分钟前
MQTT教程详解-03. 高级知识点
java·物联网·中间件·信息与通信·iot·iotdb
qq_3926906622 分钟前
SQL报表查询标准规范_SQL书写规范优化
jvm·数据库·python
kyriewen1125 分钟前
Next.js:让你的React应用从“裸奔”到“穿衣服”
开发语言·前端·javascript·react.js·设计模式·ecmascript
Nice__J27 分钟前
ISO26262功能安全——SafeOS
java·linux·安全