DukeDuke
主页
关于我们
主页
关于我们
  • Java

    • Java基础

      • 内存与磁盘
      • 进制转换
      • 数据存储
      • Java基本数据类型
      • HashMap
      • Java四大引用
    • JVM

      • 认识JVM
      • JVM类加载器
      • 运行时数据区
      • 执行引擎
      • 本地方法接口
      • 本地方法库
      • JVM垃圾回收
      • JVM性能监控
      • JVM调优
    • 设计模式
      • 单例模式
      • 工厂模式
      • 策略模式
      • 适配器模式
      • 建造者模式
      • 原型模式
      • 装饰器模式
      • 代理模式
      • 外观模式
      • 享元模式
      • 组合模式
      • 桥接模式
    • Java多线程

      • Java 线程基础详解
      • Java 线程池详解
      • Java ThreadLocal 详解
      • Java volatile 详解
      • Java 线程间通信详解
      • Java 线程安全详解
      • Java 线程调度详解
      • Java 线程优先级详解

      • Java 线程中断详解
      • Java 线程死锁详解
    • Java反射
    • Java 面试题

      • Java 基础概念面试题
      • Java 面向对象编程面试题
      • Java 集合框架面试题
      • Java 多线程与并发面试题
      • JVM 与内存管理面试题
      • Java I/O 与 NIO 面试题
      • Java 异常处理面试题
      • Java 反射与注解面试题
      • Java Spring 框架面试题
      • Java 数据库与 JDBC 面试题
      • Java 性能优化面试题
      • Java 实际项目经验面试题
      • Java 高级特性面试题
      • Java 面试准备建议

1. 概述

提示

Java 虚拟机(JVM)在执行 Java 程序时,会将其管理的内存划分为若干个不同的数据区域。这些区域各有用途,有的随着虚拟机进程的启动而存在,有的则依赖用户线程的启动和结束而建立和销毁。

2. 程序计数器

  • 定义:程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。

  • 作用:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

  • 特点:

    • 线程私有
    • 唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域

3. Java 虚拟机栈

  • 定义:Java 虚拟机栈(Java Virtual Machine Stacks)是线程私有的,生命周期与线程相同。

  • 作用:描述的是 Java 方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

  • 特点:

    • 线程私有
    • 可能抛出 StackOverflowError 和 OutOfMemoryError

4. 本地方法栈

  • 定义:本地方法栈(Native Method Stack)与虚拟机栈所发挥的作用非常相似。

  • 作用:为虚拟机使用到的 Native 方法服务。

  • 特点:

    • 线程私有
    • 可能抛出 StackOverflowError 和 OutOfMemoryError

5. Java 堆

  • 定义:Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最大的一块。

  • 作用:存放对象实例,几乎所有的对象实例以及数组都要在堆上分配。

  • 特点:

    • 线程共享
    • 可能抛出 OutOfMemoryError

6. 方法区(元空间)

  • 定义:方法区(Method Area)与 Java 堆一样,是各个线程共享的内存区域。

  • 作用:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

  • 特点:

    • 线程共享
    • 可能抛出 OutOfMemoryError

7. 总结

JVM 运行时数据区是 Java 虚拟机管理内存的核心部分,理解各个区域的作用和特点对于优化 Java 程序性能和排查内存相关问题至关重要。每个区域都有其特定的用途和生命周期,合理配置和管理这些内存区域是确保 Java 应用程序高效运行的关键。

最近更新:: 2025/12/29 11:07
Contributors: Duke
Prev
JVM类加载器
Next
执行引擎