JAVA内存模型
JVM级 JVM的内存可以分为三级,JVM级,线程级和方法级。 JVM级的包含了两块内存,方法区和堆。 方法区包含常量池和代码两部分。常量池数据可能来自类代码的常量区。 堆则存储复杂的对象。
线程级 线程级的内存区域包含三个部分:程序计数器、栈和本地方法栈。 也就是说每个线程都有一个程序计数器,一个JVM栈和一个本地方法栈。
JVM栈由帧组成,帧就是方法级的。也就是说调用一个方法时,会创建一个帧。 细节性的东西: 栈的大小是固定的,溢出会抛StackOverflowError 栈的大小不固定,自动扩展的,溢出会抛OutOfMemoryError
方法级 方法调用时创建帧,方法调用结束后销毁帧 帧包含三部分: 1 本地变量数组(编译时确定) 2 运算符栈 3 常量池引用 本地变量数组,如果是long和double则占据两个连续的数组单元 本地变量数组,0就是this,1开始是方法参数 简单的图