分区

程序计数器

相当于指令指针,记录运行指令的地址。

chatacter desctiption
每条线程拥有独立程序计数器(线程私有) 每条线程需要自身恢复
唯一无OutOfMemoryError区域 java方法在虚拟机内存,计数器记录地址<br />native方法在宿主机,计数器无地址,管理不到

Java虚拟机栈

方法运行模型

每个方法执行,都会创建栈帧(stack frame),然后在java虚拟机栈中进行入栈和出栈操作。

局部变量表

存储基本数据:int, byte, boolean, char, short, float, long, double

以及reference数据,即对象引用,指向对象指针引用

character description
线程私有 或中途挂起,独立记录
存储数据 局部变量表<br />操作数栈<br />动态链接<br />方法出口
OutOfMemoryError 空间被限制,超出会报错
StackOverFlowError 深度被限制,超出会报错

本地方法栈

虚拟机中的方法有两种:

  • java方法
  • native方法

其中native方法更像是接口定义,它可以由其他语言进行实现,然后虚拟机通过接口进行查找得到。

直白的表述就是,native的执行过程并不由虚拟机进行操控,而仅仅是作为管理容器。


  • java虚拟机栈是java方法执行栈
  • 本地方法栈是native方法执行栈

Java堆

scope description more
基本属性 线程共享 启动创建
对象分配 对象都在堆内进行分配 栈上分配,标量替换
垃圾手机 垃圾收集主体区域 新生代<br />老年代<br />eden<br />from survivor<br />to survivor<br />TLAB线程私有缓冲区
容量限制 超出容量OutOfMemoryError -Xmx<br />-Xms

方法区

attribute description
线程共享 各线程共享
数据存储 存储已经加载的数据 类信息<br />常量<br />静态变量<br />即时编译器代码
垃圾回收 常量池回收<br />类型卸载 可不实现垃圾回收<br />原永久代实现回收<br />
容量限制 超出限制OutOfMemoryError

运行常量池

scope description
坐标地址 方法区中
存储内容 编译时的字面量和符号引用
放入时机 编译期<br />运行期
内存限制 OutOfMemory
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容