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

 

总结:

虚拟机内存划分,内存溢出异常的对应区域

 

posted on 2017-10-04 15:37  Vindia  阅读(189)  评论(0)    收藏  举报

导航