JVM 核心区域与调优指南
Java 虚拟机(JVM)是 Java 跨平台运行的基石,了解其内存模型对于排查线上系统 OOM 及性能问题至关重要。
运行时数据区
- 堆 (Heap):所有线程共享,占用内存最大的一块。主要存放对象实例和数组。垃圾回收(GC)的主要区域。
- 方法区 (Method Area):所有线程共享,存放已被加载的类信息、常量、静态变量等。
- 虚拟机栈 (VM Stack):线程私有,描述 Java 方法执行的内存模型(栈帧)。
- 本地方法栈 (Native Method Stack):与虚拟机栈类似,为 Native 方法服务。
- 程序计数器 (Program Counter Register):线程私有,记录当前线程执行的字节码行号。
常用调优参数
-Xms:设置初始堆大小-Xmx:设置最大堆大小(建议与-Xms设置一致以避免堆扩容时的停顿)-Xmn:设置新生代大小-XX:+UseG1GC:启用 G1 垃圾收集器(现代大内存系统推荐)
OOM 排查思路
- 通过加启动参数
-XX:+HeapDumpOnOutOfMemoryError,在宕机时自动生成 Dump 文件。 - 使用如 MAT (Memory Analyzer Tool) 分析大对象是谁创建的,找出内存泄漏的根源。