OOM

1,OutOfMemoryError异常

除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能。

Java Heap 溢出:

一般的异常信息:java.lang.OutOfMemoryError:Java heap spacess。

java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆容量限制后产生内存溢出异常。

出现这种异常,一般手段是先通过内存映像分析工具(如Eclipse Memory Analyzer)对dump出来的堆转存快照进行分析,重点是确认内存中的对象是否是必要的,先分清是因为内存泄漏(Memory Leak)还是内存溢出(Memory Overflow)。

如果是内存泄漏,可进一步通过工具查看泄漏对象到GCRoots的引用链。于是就能找到泄漏对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收。

如果不存在泄漏,那就应该检查虚拟机的参数(-Xmx与-Xms)的设置是否适当。

2,虚拟机栈和本地方法栈溢出

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。

如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常

这里需要注意当栈的大小越大可分配的线程数就越少。

3,运行时常量池溢出

异常信息:java.lang.OutOfMemoryError:PermGenspace

如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法。该方法的作用是:如果池中已经包含一个等于此String的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。

4,方法区溢出

方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。也有可能是方法区中保存的class对象没有被及时回收掉或者class信息占用的内存超过了我们配置。

异常信息:java.lang.OutOfMemoryError:PermGenspace

方法区溢出也是一种常见的内存溢出异常,一个类如果要被垃圾收集器回收,判定条件是很苛刻的。在经常动态生成大量Class的应用中,要特别注意这点。

SOF(堆栈溢出StackOverflow):

StackOverflowError 的定义:当应用程序递归太深而发生堆栈溢出时,抛出该错误。

因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。

栈溢出的原因:递归调用,大量循环或死循环,全局变量是否过多,数组、List、map数据过大。

OOM and SOF相关推荐

  1. java处理oom_java处理OOM和SOF

    一.OOM 内存溢出,是指程序在申请内存时,没有足够的空间供其使用,出现了Out Of Memory,也就是要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出. 内存泄露会导致内存溢出, ...

  2. Java中内存问题之OOM 和SOF

    OOM:OutOfMemoryError异常 即内存溢出,是指程序在申请内存时,没有足够的空间供其使用,出现了Out Of Memory,也就是要求分配的内存超出了系统能给你的,系统不能满足需求,于是 ...

  3. JVM中OOM和SOF的产生

    学习<深入理解Java虚拟机 JVM高级特性域最佳实践>,学习到了JVM中常见的OutOfMemory和StackOverFlow产生的机理,感觉非常有用. 1.平时代码运行时遇到这两种错 ...

  4. Java 面试之语言基础

    原文:https://blog.csdn.net/u012102104/article/details/79772903 八种基本数据类型的大小,以及他们的封装类 类 型 大小 封 装 类 byte ...

  5. Android复习资料

    转载:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个 ...

  6. 从零讲JAVA ,给你一条清晰地学习道路!该学什么就学什么!!

    点击上方"后端技术精选",选择"星标公众号" 技术文章第一时间送达! 作者:nbalive2001 cnblogs.com/nbalive2001/p/6418 ...

  7. java程序员必读书目推荐

    1.java编程思想:目前知道第四版,没有Java8的知识,但是OO的思想讲的还是透彻的.入门必备. 2.effective Java:作者为jdk集合框架的开发者,读他的书可以结合jdk源码,效果更 ...

  8. jvm内存模型与垃圾回收

    *JVM历史JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫"即时编译" 互联网-js人工智能-python微服 ...

  9. Spring Boot与Shiro实现权限管理02

    1.前期设计 1.1 功能模块的设计 用户权限管理系统一般包括以下模块: 1.2 数据库的设计 根据基本的功能可以总结出6张数据库表: sys_permission:权限表 sys_role:角色表 ...

  10. 我的Java后端书单1.0

    读书的看法 从15年7月至今,研究生期间读了不少书,读书让我学到了很多,也是提升技术能力的一个重要手段.可能很多人嫌读书太花时间,曾经的我一度也是这么认为的,觉得一个程序员不敲代码,捧着一本大块头(编 ...

最新文章

  1. 数据库初学者_面向初学者的免费6小时数据科学课程
  2. python实现链表反转(转置)
  3. [转帖]如何在quartusII中调用modelsim-altera_百度文库
  4. Linux的chmod与chgrp
  5. 洛谷 P1816 忠诚 ST函数
  6. 5个不收费的自学网站:学英语、学编程、学电脑办公统统有
  7. 集合 Collection 与迭代器 Iterator
  8. 新加入一个团队,我们应该怎么做?
  9. 金笛JDMail邮件系统从源头上为企业铸造防lj邮件墙--4
  10. 自媒体免费素材,国旗高清无水印素材,PNG格式,直接引用即可
  11. SENT协议(SAE-J2716)
  12. 联想e470锁定计算机,thinkpad如何锁定键盘_联想thinkpad键盘锁怎么操作-win7之家
  13. 图像处理算法 之 Hough变换
  14. Tomcat安装步骤及详细配置教程(2022最新版)
  15. Normalize.css介绍与使用
  16. 920C. Swap Adjacent Elements
  17. 关于snipaste的网页长截屏(只能复制字或代码)
  18. Caffe--应用实践
  19. php抓取百度风云榜,php正则获取百度音乐排行榜top500
  20. 20194311姜晨昊Exp3-免杀原理与实践

热门文章

  1. 火云邪神ddos使用_ddos攻击器怎么用
  2. javascript 实现table展开折叠
  3. 关于笔记本突然鼠标无法连接,电脑蓝牙消失的问题
  4. USB转TTL、USB转RS232的实现
  5. Detect-and-Track: Efficient Pose Estimation in Videos(检测和追踪:视频中有效的姿态评估)论文解读
  6. Aop ---- Introductions(简介)---xml实现
  7. 【B站弹幕游戏开发笔记02】Win10系统下给Python项目导入Protobuf
  8. MySQL 从入门到实践,万字详解!
  9. 章文嵩博士和他背后的负载均衡帝国
  10. 手机APP支付--整合银联支付控件