运行时数据区域 | 线程私有(随用户线程的启动和结束而建立和销毁)或所有线程共享(随虚拟机进程的启动而存在) | 抛出的异常 | 备注 |
---|---|---|---|
程序计数器(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 | 本机直接内存 |