码迷,mamicode.com
首页 > 其他好文 > 详细

JVM内存区域与内存溢出异常

时间:2020-07-22 02:07:10      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:版本   文件   私有   定义   程序   溢出   指示器   虚拟机   指示   

1、运行时数据区域

 

技术图片

 

1.1、程序计数器

  • 一块较小的内存,它可以看作是当前线程所执行的字节码的行号指示器。
  • 线程独有
  • 唯一一个没有规定OutOfMemoryError情况的区域

1.2、Java虚拟机栈

  • 线程私有,生命周期与线程相同
  • 每个方法被执行的时候都会创建一个栈帧,方法的开始到结束对应了栈帧的入栈到出栈 
  • 这个内存区域定义了两个异常:
    • 如果线程请求的栈深度大于虚拟机允许的栈深度,就会报StackOverFlowError
    • 如果栈扩展时无法申请到足够的内存,就会报OutOfMemoryError

 1.3、本地方法栈

  本地方法栈与虚拟机栈的区别是,虚拟机栈为虚拟机执行Java方法服务,而本地方法栈是为本地Native方法服务。

  该区域和虚拟机栈一样也会报两种异常,同上。

1.4、Java堆

  • 内存中最大一块区域
  • 线程共享,在虚拟机启动时创建,用来存放对象实例
  • 如果堆中没有内存完成实例分配,并且堆无法扩展时,也会抛出OutOfMemoryError (可以通过通过参数-Xmx和-Xms设定)

1.5、方法区

  • 线程共享
  • 存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据
  • 运行时常量池是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息,还有一项信息是常量池表,用于存放编译期生成的各种字面量与符号引用,这部分内容将存放在运行时常量池中。
  • 如果方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

JVM内存区域与内存溢出异常

标签:版本   文件   私有   定义   程序   溢出   指示器   虚拟机   指示   

原文地址:https://www.cnblogs.com/TripL/p/13358108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!