Java程序内存布局

Java程序内存区域总体分为线程私有区域、线程共享区域和堆外内存区

线程私有区域

程序计数器

记录线程执行到的字节码行号

虚拟机栈

执行、退出方法时生成、删除栈帧
栈帧中有编译期确定的局部变量表、操作数栈、返回地址、动态连接
栈帧满栈溢出,栈满扩栈失败OOM

本地方法栈

native方法栈帧保存处
栈帧超限栈溢出,栈满扩栈失败OOM

线程共享区域

堆区

存储对象和数组实例
堆满扩堆失败OOM

方法区

包含运行时常量池,存储类加载信息、常量、静态变量、即时编译缓存
方法区满OOM

直接内存

不属于运行时数据区,属于应用程序可用内存区域
保存堆外内存引用直接操作,避免native堆和Java堆复制开销
可能导致OOM

参考资料

周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 3. 北京:机械工业出版社, 2019.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号