1.Java堆溢出
只要不断地创建对象,并且保证GC roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。

要解决这个异常,一般先通过内存映像分析工具对堆转储快照分析,确定内存的对象是否是必要的(即判断是内存泄露还是内存溢出)。

如果是内存泄露,可以进一步通过工具查看泄露对象到GC Roots的引用链,比较准确地定位出泄露代码的位置。

如果是内存溢出,可以调大虚拟机堆参数,或者从代码上检查是否存在某些对象生命周期过长的情况。

2.虚拟机栈和本地方法栈溢出
如果线程请求的栈深度大于虚拟机栈允许的最大深度,将抛出StackOverflowError异常。如果虚拟机在拓展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。

定义大量的本地变量,增大此方法帧中本地变量表的长度,达到栈允许的最大深度后,就会抛出StackOverflowError。

单线程情况下,很难抛出OutOfMemoryError异常。因为你在达到栈最大深度时,一般都还没有用完内存空间。

如果是多线程情况下,不断创建新的线程,新的线程中又不断创建新变量,可能会抛出OutOfMemoryError。

3.方法区和运行时常量池溢出
String.intern()是一个native方法,它的作用是:如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象,否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。

在JDK1.6及之前的版本中,由于常量池分配在永久代中,如果不断地intern,会抛出OutOfMemoryError异常。使用JDK1.7就不会抛出。

方法区溢出的情况:一个类要被垃圾回收器回收掉,判断条件是比较苛刻的。在经常动态产生大量Class的应用中,需要特别注意类的回收状况。比如动态语言、大量JSP或者动态产生JSP文件的应用(JSP第一次运行时需要编译为Java类)、基于OSGi的应用(即使是同一个类文件,被不同的加载器加载也会视为不同的类)。

Java内存异常产生情况分析 西安尚学堂相关推荐

  1. 支撑Java内存模型的基础原理 西安尚学堂

    指令重排序 在执行程序时,为了提高性能,编译器和处理器会对指令做重排序.但是,JMM确保在不同的编译器和不同的处理器平台之上,通过插入特定类型的Memory Barrier来禁止特定类型的编译器重排序 ...

  2. 西安尚学堂练习09.17|Java编程笔试面试题

    下列哪些类型能被throw语句抛出? A. Error B. Exception C. Throwable D. Object [解]注意Error也是可以被throw的,只是通常Error出现程序就 ...

  3. 冷静对待你遇到的所有Java内存异常

    被人说烂的Java内存模型 Java内存模型的相关资料在网上实在是太多了,不管是过时的还是不过时的,网络上充斥的学习资料,比如各类研究Java内存模型的博文,也随着Java的发展,渐渐失去了其内容的准 ...

  4. Java内存溢出问题排查分析

    目录 前言 一.MAT(Memory Analyzer Tool) 二.软件初识 三.捕获dump文件 1.主动方式 2.被动方式 四.分析dump文件 总结 前言 项目运行过程中,我们可能会遇到Ja ...

  5. Java内存模型JMM简单分析

    参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...

  6. java内存溢出的情况解决方法

    内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决. 第一步,就是修改JVM启动参数,直接增加内存.这一点看上去似乎很简单,但很容易被忽略.JVM默认可以使用的内存为64M,To ...

  7. 什么是Java 西安尚学堂

    如果要向一无所知的人解释Java是什么还是比较有难度的,是的,它是一门编程语言,但发展到今天,Java一词远程超出了语言的定义,具体来说,Java是一个包括虚拟机环境,与C语言类似,包括库和支持软件, ...

  8. java内存问题排查及分析

    最近了解了一下jdk对于jvm分析工具的使用,下面通过一个简单的列子介绍一下,以下内容部分来自其他帖子. 下面这段代码明显有问题(从网上抄的) 1 import java.util.HashMap; ...

  9. Java注释规范 西安尚学堂

    一.背景 1.当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析这段代码,我们需要什么样的注释信息? 2.怎么样避免我们的注释冗长而且凌乱不堪呢? 3.在多人协同开发.维护的今天,我们需要怎 ...

最新文章

  1. Linux使用Shell脚本实现ftp的自动上传下载
  2. esc指令检查打印状态_Z.115 胶片自助打印设备
  3. 量子计算机超越传统计算机位数,量子计算机相对于传统的计算机有着怎样的优势?...
  4. 爱立信CEO:全球芯片短缺可能持续到2022年
  5. 字节面试:如何用Redis实现一个分布式锁?
  6. ASP.NET MVC + ADO.NET EF 项目实战(三):引入jQuery
  7. (转)吴寿鹤:区块链中的软分叉与硬分叉详解
  8. matlab的图像滤波,Matlab实现图像滤波
  9. 数学建模之统计回归模型详解
  10. 语音社交app源码中音频混音的实现步骤
  11. new Function的用法
  12. 在信息流上,百度或许可以给谷歌信息流支个招
  13. Mac (M1) 软件及环境搭建
  14. 一些过时的免杀技巧 仅供参考
  15. 导师姻缘牵线,这对博士夫妻:累计一作发15篇论文,毕业留校任教!
  16. 这款文件传输软件每隔10秒就会发起文件同步——镭速传输
  17. 3D打印无人机等无人设备6——谈一谈从设计到实践的分分合合,模型如何合并与拆分?
  18. 第九章:项目资源管理-0316
  19. 江苏单招C语言试题,江苏对口单招考试大纲-计算机类专业综合理论
  20. 使用aspose进行word转pdf(liunx适用)

热门文章

  1. python三目运算与匿名函数
  2. win10家庭版调出组策略_Win10关机不顺畅 - 仍提示有程序运行
  3. c#读取excel两列数据并绘制xy曲线_我用Python展示Excel中常用的20个操作
  4. 12星座个性陶瓷复古项链
  5. 查看MTK平台的vmlinux和log是否匹配
  6. INGame体素大乱斗
  7. C程序-蓝桥-未名湖边的烦恼
  8. Flash动画文件在PowerPoint中不能正常播放
  9. python函数返回值
  10. L2TP 连接公司内网(调制解调器报告了一个错误)