JVM虚拟机-Java内存区域与内存溢出异常
1,运行时数据区
分两大类:
第一类,线程共享的数据区:
a,方法区
1,运行时常量池:编译期间生成的各种字面量和符号引用,
b,堆区
1,新生代
(1),Eden空间
(2),From Survivor空间
(3),To Survivor空间
2,老年代
c,直接内存,比如DirectByteBuffer
第二类,线程独享数据区:
a,虚拟机栈(由多个栈帧组成,每层方法调用则为一帧)
1,局部变量表
2,操作数栈
3,动态链接
4,方法出口等信息
b,本地方法栈
c,程序计数器:当前线程所执行的字节码的行号指示器
其中方法区中有一部分为运行时常量池
2.4 异常部分
2.4.1 Java堆溢出
异常信息:java.lang.OutOfMemoryError:Java heap space
2.4.2 虚拟机栈和本地方法栈
1,线程请求的栈深度大于虚拟机允许的最大深度:StackOverflowError
2,虚拟机在扩展栈时无法申请到足够内存:OutOfMemoryError
2.4.3 方法去和运行时常量池溢出
java.lang.OutOfMemoryError:PermGen space(因为HotSpot虚拟机是将方法区做在永久代)
2.4.4 本机直接内存溢出
DirectByteBuffer :java.lang.OutOfMemoryError
总结:
虚拟机内存划分,内存溢出异常的对应区域