java JVM内存结构图
JVM中的内存是JVM向操作系统中申请一块内存,在针对这个内存划分一个区域。
线程私有:一个进程中存在多个线程,每个线程中都存在自己的栈和程序程序计数,随着线程的产生和消亡而存在,不需要考虑垃圾回收。
线程共享:一个进程中共用一个堆和一个方法区,在JVM中只有一个堆,需要考虑垃圾回收
1)程序计数器(PC寄存器):每条线程都有一个独立的的程序计数器,程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM(内存溢出:Out Of MemoryError)情况的区域。
2)JVM栈:保存基本数据类型,方法,常量;Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法;对象在堆中分配内存后,需要在栈中分配地址用来引用堆中的对象;
栈中的内存分配是顺序分配,而且定长;
3)本地方法栈:为本地方法服务,一般是C++方法
4)堆Heap:用来存储对象本身的以及数组(数组引用是存放在Java栈中的)。堆是被所有线程共享的。堆中只存放对象本身 ;字符串常量池在堆区中;堆区是