1、方法区溢出

第一种原因:上线的时候MetaSpace区域直接用默认的参数,即根本不设置其大小,这会导Meta

Space区域可能才几十M而已或者设置的比较小,此时对于一个稍微大型系统,因为他有很多自己的类,还依赖了很多外部jar包的类,MetaSpace空间很容易不够的。

第二种原因:就是很多人开发系统代码都会用一些cglib之类的技术动态生成一些类,一旦代码没有控制好,导致生成的类过多的时候,就很容易MetaSpace给塞满,进而引起内存溢出。

2、虚拟机栈/本地方法栈溢出
(1)StackOverflowError:当线程请求的栈的深度大于虚拟机所允许的最大深度,则抛出StackOverflowError,简单理解就是虚拟机栈中的栈帧数量过多(一个线程嵌套调用的方法数量过多)时,就会抛出StackOverflowError异常。最常见的场景就是方法无限递归调用。
(2)OutOfMemoryError:如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemoryError。
虚拟机中可以供栈占用的空间≈可用物理内存 - 最大堆内存 - 最大方法区内存,比如一台机器内存为 4G,系统和其他应用占用 2G,虚拟机可用的物理内存为 2G,最大堆内存为 1G,最大方法区内存为 512M,那可供栈占有的内存大约就是 512M,假如我们设置每个线程栈的大小为 1M,那虚拟机中最多可以创建 512个线程,超过 512个线程再创建就没有空间可以给栈了,就报 OutOfMemoryError 异常了。

3、堆内存溢出
(1)内存中加载的数据过多如一次从数据库中取出过多数据;集合对对象引用过多且使用完后没有清空;代码中存在死循环或循环产生过多重复对象;堆内存分配不合理;网络连接问题、数据库问题等。
(2)系统承载高并发请求,因为请求量过大,导致大量的对象都是存活的,所以要放入新的对象放不下了,此时就会引起内存溢出系统崩溃;
(3)系统有泄漏的问题,就是莫名其妙产生了很多对象,结果对象都是存活的,没有及时取消他们的引用,导致触发GC还是无法回收,此时只能引发内存溢出,因为实在是放不下更多的对象了。

4、本机直接内存溢出
本机直接内存(DirectMemory)并不是虚拟机运行时数据区的一部分,也不是 Java 虚拟机规范中定义的内存区域,但 Java 中用到 NIO 相关操作时(比如 ByteBuffer 的 allocteDirect 方法申请的是本机直接内存),也可能会出现内存溢出的异常

jvm中有哪些内存区域会发生内存溢出相关推荐

  1. 什么是内存溢出?在哪些区域会发生内存溢出?

    什么是内存溢出?在哪些区域会发生内存溢出?回答这个问题,我们需要先看一看Java代码是怎么运行的.现在计入说我们写了一个 HelloWorld.class: 1 2 3 4 5 6 public cl ...

  2. java heap 内存_深入理解jvm之内存区域与内存溢出

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器当前线程所执行的字节码的行号指示器 当前线程私有 不会出现OutOfMemoryError情况 java虚拟机栈线程私有,生命周期与线程相同 ...

  3. 《深入理解JAVA虚拟机》详细解读(第二章 ):JAVA内存区域与内存溢出异常

    目录 一.JAVA内存区域与内存溢出异常 1. 概述 2. 运行时数据区域 2.1 程序计数器 2.2 Java虚拟机栈 2.3本地方法栈 2.4 堆 2.5 方法区 2.6 运行时常量池 2.7直接 ...

  4. 图解Java内存区域及内存溢出异常

    图解 Java 内存区域及内存溢出异常 在阅读 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) >后,为了加深对 Java 内存区域的印象及理解,特意做成了思维导图. 名词解 ...

  5. java 计数器越界,[总结]-第二章 Java内存区域与内存溢出异常

    [总结]-第二章 Java内存区域与内存溢出异常 一.知识点 1.虚拟机运行时数据区 方法区:运行时常量池(JDK1.7被移出) 堆:存放对象实例或数组.新生代和老年代 虚拟机栈:线程私有.栈 本地方 ...

  6. 【深入理解Java虚拟机学习笔记】第二章 Java 内存区域与内存溢出异常

    最近想好好复习一下java虚拟机,我想通过深读 [理解Java虚拟机 jvm 高级特性与最佳实践] (作者 周志明) 并且通过写一些博客总结来将该书读薄读透,这里文章内容仅仅是个人阅读后简短总结,加强 ...

  7. Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 Java与C++之间有一堵由内存动态分配和垃圾收集技术围城的"高墙",墙外的人想进去,墙里的人却想出来 概述 对于C.C++程序开发人员来说,在内存 ...

  8. JVM-02内存区域与内存溢出异常(中)【hotspot虚拟机对象】

    文章目录 思维导图 对象的创建 对象的内存布局 实例数据(Instance Data) 对齐填充(Padding) 对象的访问定位 使用句柄(类似间接指针) 直接指针访问 (HotSpot采用这种方式 ...

  9. 《深入理解Java虚拟机》Java内存区域与内存溢出异常

    <深入理解Java虚拟机>Java内存区域与内存溢出异常 参考文章: (1)<深入理解Java虚拟机>Java内存区域与内存溢出异常 (2)https://www.cnblog ...

最新文章

  1. VS快速注释多行 以及 取消
  2. 计算机网络2004(模拟试题),中国矿业大学2003—2004学年(计算机网络)模拟试题 A卷...
  3. AttributeError: module ‘grpc.experimental.aio‘ has no attribute ‘StreamUnaryCall‘
  4. 用java程序将GBK字符转成UTF-8编码格式(转)
  5. OpenCV使用模板与遮罩匹配的实例(附完整代码)
  6. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
  7. Python二级笔记(9)
  8. jupyter notebook运行的快捷键_AI Studio-Notebook基础使用教程(一)
  9. linux安装挂载samba,【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
  10. 用VB实现带图片的XP风格的按钮控件
  11. 【Python】【有趣的模块】【systimeos】
  12. 线程Thread(Java)
  13. 100句话,是否会触动你?
  14. VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法
  15. Python——词频统计
  16. cdr添加节点快捷键_常用CDR快捷键
  17. 《流浪地球》逆袭《新喜剧之王》的真正原因
  18. MPEG-TS 格式解析
  19. k8s.gcr.io、gcr.io仓库的镜像下载
  20. excel怎么按颜色统计单元格个数

热门文章

  1. NPOI 导入Excel和读取Excel
  2. 在Visual Studio 2010/2012中 找不到创建WebService的项目模板
  3. C#学习笔记-stream,win8.1开发小记
  4. POJ3461 Oulipo ——KMP算法——Pku3461
  5. 【系统平台】模拟器-通道-模型-图形配置
  6. 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
  7. unittest中的测试固件
  8. com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
  9. lintcode480- Binary Tree Paths- easy
  10. jQuery 事件用法详解