公司动态
【JVM调优实战】04-JVM内存结构
JVM 内存结构:堆、栈、方法区到底装了什么本文是《JVM调优实战》专栏第 4 讲。如果你写过 Java 程序,一定遇到过OutOfMemoryError或StackOverflowError。但你是否清楚,这些错误分别发生在 JVM 的哪个内存区域?为什么堆会 OOM 而程序计数器不会?为什么调小-Xss就容易栈溢出?要回答这些问题,我们必须把 JVM 的运行时数据区拆开来看。JVM 在执行 Java 程序时,会把管理的内存划分为若干个区域,每个区域有各自的用途和生命周期。理解这些区域的职责与边界,是做好 JVM 调优和排查线上问题的前提。本章我们将逐一剖析 JVM 的五大运行时数据区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(元空间),搞清楚它们到底装了什么、谁共享谁私有、什么时候会崩。运行时数据区全景JVM 规范定义了若干运行时数据区,其中一部分随虚拟机启动而创建、随虚拟机退出而销毁,另一部分则与线程一一对应、随线程生死而生死。按线程共享维度划分如下:维度区域线程私有?是否会 OOM备注线程私有程序计数器(PC Regi