Java虚拟机的内存结构
已于 2026年02月28日 17:07 修改
访问次数:0
一、JVM结构
二、JVM内存结构概览:

2.1 程序计数器
和物理机的程序计数器概念一致,用于确认当前线程执行代码的位置,在上下文切换时候会被推入栈中/从栈中恢复。为线程私有。
2.2 JVM栈配置
JVM栈的是配置每个线程可以使用的内存大小,而不是所有线程总内存。对于每个线程来说,这个内存是私有的,主要存:1. 上下文切换时候的程序计数器 2. 超出指定寄存器数量的函数参数 3. 局部变量
2.2.1 StackOverflowError
当存储的上3种信息超过Xss(如大量不同函数发生上下文切换,递归层数过高)可能导致需要的内存数量超过Xss,导致StackOverflowError。
2.2.2 OutOfMemoryError
Xss会给每个线程分配固定大小的内存,当物理内存无法提供新的线程的Stack空间,就会出现OutOfM emoryError。
注意:StackOverflowError 和 OutOfMemoryError出现的场景是不同的,原因也是不同的,不可以把两者混为一谈,简单的称为”内存溢出“。StackOverflowError是单个线程纬度的,简单直白的说就是“程序发生过度的上下文切换,导致stack中保存了大量的上下文信息”,其排查方向一般是在程序层面:1. 递归调用2. 大量嵌套方法 3. 框架内部连续函数调用链过深。OutOfMemoryError是系统内存不足,导致一个进程导致的(即使这个进程是正常的进程)。
评论(0)