1. jvm内存模型概念
  2. 运行时数据区

    1. 线程隔离的数据区

      1. Promgram Counter Register(程序计数器)
      2. JVM Stack(虚拟机栈)
      3. Native Method Stack(本地方法栈)
    2. 线程共享的数据区
    3. Heap(堆)
    4. Method Area(方法区)

      1. Runtime Constant Pool(运行时常量池)
  3. Direct Memory(直接内存)

jvm内存模型概念

jvm在运行Java程序的过程中会把它所管理内存划分为若干个不同的数据区域,每个区域有着自己不同的用途.

运行时数据区

java 内存区域 - 图1
java 内存区域 - 图2

线程隔离的数据区

Promgram Counter Register(程序计数器)

每个线程运行到的字节码指令的行号
不同的线程拥有自己独自的ProgramCounterRegister

JVM Stack(虚拟机栈)

虚拟机栈是线程私有的,为jvm执行java方法服务

Native Method Stack(本地方法栈)

为jvm调用本地方法服务

线程共享的数据区

Heap(堆)

所有的对象实例和数组都在堆上分配
GC主要是管理这部分区域的,

Method Area(方法区)

  • 存储已被虚拟机加载的类信息,常量,静态变量,JIT编译后的代码

Runtime Constant Pool(运行时常量池)

Direct Memory(直接内存)

非JVM运行时数据区的一部分
在NIO中,调用Native Method,中直接使用了堆外内存
这部分内存也属于物理内存,在jvm调优是往往忽略了这部分内存.导致OutOfMemeoryError