Java虚拟机所管理的内存,包含的运行时数据区域?

运行时数据区域 线程私有(随用户线程的启动和结束而建立和销毁)或所有线程共享(随虚拟机进程的启动而存在) 抛出的异常 备注
程序计数器(Program Counter Register) 线程私有 唯一不抛出 OutOfMemoryError 异常的区域
虚拟机栈(VM Stack) 线程私有 会抛出 StackOverflowError、OutOfMemoryError
本地方法栈(Native Method Stack) 线程私有 会抛出 StackOverflowError、OutOfMemoryError
堆(Heap) 所有线程共享 会抛出 OutOfMemoryError 通过 -Xmx 和 -Xms 设置堆大小
方法区(Method Area)
jdk8及以上版本,叫元空间(MetaSpace)
所有线程共享 会抛出 OutOfMemoryError 运行时常量池(Runtime Constant Pool)是方法区的一部分,受到方法区内存的限制。
直接内存(Direct Memory) 所有线程共享 会抛出 OutOfMemoryError 本机直接内存

图示:

参考:https://mp.weixin.qq.com/s/mehFhIR2ne3Tnl7RlBNuhA

原文地址:https://www.cnblogs.com/cag2050/p/11894668.html