JVM基础之内存空间和异常(一)

2019-03-05  本文已影响0人  银河舰长

“合抱之木,生于毫末;千里之行,始于足下;九层之台,起于垒土。”

一、虚拟机运行时数据区

  1. 程序计数器
  1. Java虚拟机栈
  1. 本地方法栈
  1. Java堆
  1. 方法区
  1. 运行时常量池
  1. 直接内存

二、内存中的对象

  1. 对象的创建
  1. 对象的内存布局
  1. 对象的访问和定位

三、OutOfMemoryError异常

  1. 程序计数器
    没有规定OOM异常的内存区域。
  2. 堆空间
    堆内存的OOM异常是实际应用中常见的内存溢出异常情况,通过-XX:HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前内存堆转储快照以便事后进行分析,使用-Xms20m和-Xms20m设置最小和最大值。
  3. 栈空间
    栈空间在单线程时栈空间内存不足时抛出SOF异常,在多线程时建立新的线程时会因内存不足抛出OOM异常。
  4. 方法区
    方法区通常会在大量动态生成对象时(如Spring启动时)导致OOM异常,运行时常量池无限制增大同样会导致方法区OOM异常。
  5. 直接内存
    向操作系统申请分配内存时,通过计算得知内存无法分配,会抛出OOM异常。通过-XX:MaxDirectMemorySize指定大小,默认值与堆空间-Xmx值相同。

说明

上一篇下一篇

猜你喜欢

热点阅读