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


线程隔离的数据区
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
