java的内存区域大概可以分配为堆,栈, 方法区, 程序计数器,直接内存
(1)程序计数器: 可以堪称线程执行时用于指示当前所执行的字节码的行号指示器。有点类似与寄存器中的PC寄存器
(2)栈分为Java虚拟机栈和本地方法栈。java虚拟机栈为java字节码运行时调用的栈,主要结构为栈帧,栈帧中保存村当前调用函数的局部变量表,操作数栈,动态链接,方法出口等信息。本地方法栈为java代码在调用native函数时使用的栈。
(3)java堆,用于用户分配动态对象的内存区,是java垃圾收集器管理的主要区域。
(4)方法区,用于保存虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
(5)直接内存,并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,在NIO中有用到该类机制,用于避免在Java堆和native堆之间来回的复制数据,从而提高性能。