JVM的内存结构、内存溢出、内存泄漏、内存模型你知道吗?

本文介绍了JVM的内存结构,包括程序计数器、元空间、堆、栈和本地方法栈。详细阐述了Metaspace与Heap的分配与作用。同时讨论了JVM内存溢出和内存泄漏的原因、影响及解决策略。最后,解析了Java内存模型(JMM),强调了工作内存与主内存交互的原子操作和一致性规则。
摘要由CSDN通过智能技术生成

Java8后,内存分成如下几部分:程序计数器PC Register,Metaspace,Stack,Heap,和本地方法栈。

Metaspace用于存放类的元信息以及方法信息;而常量池和静态变量存在Heap中。Heap里面存储运行时产生的对象。Stack里面存放线程相关的数据,如局部变量,参数,对象引用等。PC Register存放的是当前线程执行的指令地址。本地方法栈是调用本地方法时用到的。

上图左边的Metaspace和Heap在JVM中是唯一的,全部线程都会共享这两片区域。右边的Stack/本地方法stack/程序计数器则是线程相关的。

从物理内存来讲,Metaspace不再使用虚拟机的内存,而是直接使用本地内存,由操作系统管理,仅受本地内存大小限制。
调整Metaspace内存大小的参数 

-XX:MetaspaceSize -XX:MaxMetaspaceSize

堆区Heap:
(1)存储的全部是对象。
(2)存放的这些对象是程序运行时动态创建的。
(3)jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。
(4)常量池和静态变量存在Heap中。
栈区Stack:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值