【JVM系列】JVM内存结构

JVM内存主要分为堆、方法区、虚拟机栈、本地方法栈和程序计数器。线程私有部分包括程序计数器、虚拟机栈和本地方法栈,而堆和方法区是线程共享的。方法区在1.8后由元空间替代,堆中分新生代和老年代,大对象可能直接进入老年代。静态变量和字符串常量池位于堆中。

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

JVM内存结构

在这里插入图片描述

运行时数据区

  1. JAVA运行时内存划分堆,方法区,虚拟机栈,本地方法栈和程序计数器。

  2. 线程私有的有:

- 程序计数器
- 虚拟机栈
- 本地方法栈

​ 线程共享的有:

- 堆
- 方法区

程序计数器

用来记录当前线程执行的位置(下一条需要执行的字节码指令)。

虚拟机栈(栈)

  1. Java栈中存储的是栈帧,每一次函数调用,对应的栈帧会被亚茹到Java栈中。
  2. 栈帧的内存结构:局部变量表,操作数栈,动态链接,方法出口信息。
  3. 设置栈大小:-Xss2M

本地方法栈

虚拟机调用的Native方法。

方法区

用来存储被虚拟机加载的类信息和运行时常量池。

1.8 之后方法区存放在元空间。

  1. 可以细分为新生代和老年代,新生代分为Eden区,From Survivor区,To Survivor区。

  2. 对象如果在新生代存活了足够长的时间而没有被清理掉(即在几次Young GC后存活了下来),则会被复制到老年代

  3. 如果新创建对象比较大(比如长字符串或大数组),新生代空间不足,则大对象会直接分配到老年代上(大对象可能触发提前GC,应少用,更应避免使用短命的大对象)

  4. 补充一下,静态变量和字符串常量池是存放在堆空间的

  5. 设置堆内存大小,-Xms1M -Xmx2M

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值