JVM的基础内存模型和架构思路

本文详细介绍了JVM内存模型,包括栈、堆、方法区(JDK1.8后变为元空间)以及虚拟机栈和本地方法栈。讲解了不同内存区域的作用,如栈用于方法执行,堆存放对象,元空间存储类信息。同时,阐述了JVM的垃圾回收机制,如引用计数法、标记清除、标记压缩和复制算法,并提及了各种垃圾收集器,如串行、并行、CMS和G1。此外,还讨论了JVM参数优化,如-Xms和-Xmx,并提到了G1收集器的配置和工作模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM

JVM的内存模型

JDK = JRE + 开发工具

JRE = JVM + 类库

hotspot jvm

java内存模型

1.栈Stack:方法运行,存放方法的局部变量

2.堆Heap:存放对象-16进制的地址值

3.方法区:存放.class反射相关信息,包含方法信息

jdk1.8的堆内存模型

https://images2015.cnblogs.com/blog/584866/201704/584866-20170426175411428-34722603.png

堆和方法区是线程共有的,程序计数器,虚拟机栈,native栈是线程私有

堆heap

jvm所管理的内存中****最大的****一块内存区域,存放了对象

老年代:OldGen区 2/3
年轻代:Eden区 + 2*Survivor(s0区,s1区)  1/3
Eden 8/10 Survivor1/10

创建后对象优先Eden,在一次年轻代GC后进入s0或是s1,大对象和长期存活的对象老年代

方法区

*存储虚拟机加载的类信息、常量、静态变量,运行时常量池*

永久代变成了元空间Metaspace(非堆)
现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常
基于此,将永久区废弃,而改用元空间,改为了使用本地内存空间。
元空间

**元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。**不会向方法区一样因为内存不够而发生内存泄漏

虚拟机栈JVM Stack

java方法执行的内存模型。

本地方法栈 Native Stack

Native方法执行的内存模型

程序计数器(PC Register)

JVM最小的内存区域,线程指示器

jps、jinfo、jmap

通过jps 或者 jps ‐l 查看java进程

查看某一参数的值,用法:jinfo ‐flag <参数名> <进程id>

查看内存使用情况 jmap ‐heap 进程号

JVM优化

jvm的运行参数

  • 标准参数 -help -version
  • -X参数 -Xint -Xcomp
  • -XX参数 -XX:newSize -XX:+UseSerialGC 经常使用

-Xms和-Xmx参数

-Xms与-Xmx分别是设置jvm的堆内存的初始大小和最大大小。
-Xms512m:等价于-XX:InitialHeapSize 设置jvm初始堆内存512M
-Xmx2048m:等价于-XX:MaxHeapSize,设置jvm最大堆内存2048
[root@node01 test]# java ‐Xms512m ‐Xmx2048m TestJVM

JVM垃圾回收机制GC

垃圾回收的常见算法

引用计数法
假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的计数器的值为0,就说明对象A没有引用了,可以被回收
标记清除法
先从根节点标记的引用对象,后清楚未被标记引用的对象
标记压缩法
先从根节点标记的引用对象,后将标记对象和未被标记对象压缩到内存一段,清楚垃圾
复制算法
内存一分为二,在垃圾回收时,将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收。

垃圾收集器

串行垃圾收集器

单线程垃圾回收

并行垃圾收集器

多线程垃圾回收

CMS垃圾收集器

并发,标记-清除算法,针对老年代垃圾回收,通过参数-XX:+UseConcMarkSweepGC进行设置

G1垃圾收集器

jdk9之后默认的垃圾收集器

  1. 第一步,开启G1垃圾收集器 -XX:+UseG1GC
  2. 第二步,设置堆的最大内存 -Xmx1024m
  3. 第三步,设置最大的停顿时间

三种模式 Young GC、Mixed GC、Full GC

最大的区别在于它取消了年轻代、老年代的物理划分,将堆划分为若干个区域(Region)

在G1中,有一种特殊的区域,叫Humongous区域。存储巨型对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子津

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值