Java内存分配:
内存分为:方法区,堆区,栈(虚拟机栈,本地方法栈),程序计数器。
方法区和堆区对于线程是共享的,而虚拟机栈和本地方法栈,程序计数器是线程隔离的。
程序计数器:
记录当前线程所执行的字节码的行号,每个线程需要独立的程序计数器。
Java虚拟机栈:
每个方法在被执行时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。虚拟机内存栈是我们通常讲的“栈”
本地方法栈:
与虚拟机栈类似,区别在于 虚拟机栈为虚拟机执行Java方法服务,本地方法栈为虚拟机使用Native方法服务。
堆区:
公共内存,在虚拟机启动时创建。存放对象实例。Java物理上可以是不连续的,但是逻辑上连续。
方法区(静态区):
与堆区相同,在各个线程间共享。存储类信息,常量,静态变量,常量池。