原创

简述面试常问的JVM内存模型

温馨提示:
本文最后更新于 2025年01月10日,已超过 12 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

最近在面试找工作,常被问一些八股文,比如JVM的内存模型,本篇就来对这部分进行一些整理,增强记忆。

JVM在运行时,会把内存区域划分为几大块,对每块区域进行单独的创建、销毁等管理,可以分为线程私有区域和线程共享区域两大部分,如下图所示:

JVM内存模型

程序计数器:每个线程都有一个独立的程序计数器,用于存储下一条待执行指令的地址。

Java虚拟机栈:与程序计数器一样,虚拟机栈也是线程私有的。用于存储局部变量表、操作栈、动态链表、返回值及方法出口等信息。栈的大小决定了方法调用的深度(-Xss参数可设置虚拟机栈的大小)。

本地方法栈:用于支持本地方法的调用,同样也是线程私有的。

Java堆:是JVM管理的最大的一块内存区域,主要用于存储实例化的对象及数组。它是线程共享区域。是垃圾回收的主要区域,分为新生代和老年代。刚创建的对象在新生代的Eden区,经过GC进入新生代S0区域中,再经过GC进入新生代的S1区域,达到设定GC值(如15次)后任存在则进入老年代。当堆没有可用空间时,会抛出OOM异常。

方法区:用于存储已经被加载的类信息、常量、静态变量等数据,是线程共享区域。JDK8以后,方法区被元数据区代替。

正文到此结束
本文目录