以下是JVM规范上内容。
内存划分
1 每个线程的数据区(不共享)
每个线程的独立共享区包括程序计数器,JVM 栈,本地方法栈,在创建线程时候这些被一同创建。
程序计数器用于控制每个线程执行。JVM堆栈包含下图的调用帧。
本地方法栈用于支持本地方法,比如非Java语言的方法。
2. 被所有线程共享的区域
所有线程共享堆和方法区。
堆是我们常处理的区域,它包含着数组和对象。在启动的时候被JVM创建,垃圾收集器主要工作在这个区域。
方法区保存运行的常量池,字段和方法数据,方法和构造函数的代码。
运行常量池是类文件中constant_pool表中每个类或每个接口运行时候的表示形式。它包含几种常量,从编译时已知的数字字母到方法和字段引用,必须在运行时解析。
JVM栈信息
堆栈包含框架,当调用方法时候,Frame被推送到堆栈中。一个Frame包含局部变量数组,操作数堆栈,到常量池的引用等。