java虚拟机内存告警_java虚拟机内存溢出各种场景总结
java堆溢出
java堆用于存储对象实例,只要不断地创建对象,并且保证gc roots到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出。
异常:java.lang.OutOfMemoryError: java heap space
要解决这个区域的异常,首先要区分是出现了内存泄露(Memory Leak)还是内存溢出(Memory OverFlow)。 解决方式:如果是内存泄露,通过工具(eclipse memory analyzer)查看泄露对象到gc roots的引用链。于是就能找到泄露对象是通过怎样的路径与gc roots相关联 并导致垃圾回收器无法自动回收它们的。掌握了泄露对象的类型信息及gc roots引用链的信息,就可以准确的找出泄露代码的位置。 如果不存在泄露,换句话说,就是内存中的对象确实都还必须存活着,那就应当检查虚拟机的堆参数(-Xmx与-Xms)与机器物理内存是否还可以调大,从代码上检查 是否存在某些对象生命周期过长,持有状态时间过长的情况,尝试减少程序运行期的内存消耗。
虚拟机栈和本地方法栈溢出
-Xoss参数设置本地方法栈大小 -Xss 参数设置栈容量
-Xoss参数是否有效,取决于jvm采用了哪种虚拟机,譬如如果采用HotSpot虚拟机,-Xoss参数(无效),这样虚拟机栈和本地方法栈通过栈容量控制。
关于虚拟机栈和本地方法栈,在java虚拟机规范中描述了两种异常: 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
在单个线程下,无论是由于栈帧太大还是虚拟机容量太小,当内存无法分配的时候,虚拟机抛出的都是StackOverflowError异常。 如果不限于单线程,在这种情况下,为每个线程的栈分配的内存越大,反而越容易产生内存溢出异常。
如果建立过多线程导致内存溢出,在不能减少线程数或者更换64位虚拟机的情况下,就只能通过减少最大堆和减少栈容量来换取更多的线程。
方法区和运行时常量池溢出
运行时常量池是方法区的一部分。 从JDK1.7开始逐步“去永久代”,我们这里讨论1.6版本,在1.6版本中,由于常量池分配在永久代内,我们可以 通过-XX:PermSeize和-XX:MaxPermSeize限制方法区大小,从而间接限制其中常量池的容量。
异常:java.lang.OutOfMemoryError: PermGen space
方法区用于存放Class的相关信息,如类名,访问修饰符,常量池,字段描述,方法描述等。 方法区异常是一种常见的内存溢出异常,一个类要被垃圾收集器回收掉,判定条件是比较苛刻的。在经常动态生成大量Class的应用中,需要特别注意类的回收情况。
本机直接内存溢出
异常:java.lang.OutOfMemoryError
DirectMemory容量可通过-XX:MaxDirectMemorySize,如果不指定,默认与java堆最大值(-Xmx指定)一样。 由DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常,如果发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,那就可以 考虑检查一下是不是这方面的原因。
java虚拟机内存告警_java虚拟机内存溢出各种场景总结相关推荐
- java虚拟机内存告警_Java虚拟机总结
JVM体系四大块: 类的加载 JVM内存结构 GC算法 垃圾回收 GC分析 性能调优 执行引擎 JVM架构图 jvm.arch 一.类的加载机制 类的加载 类的加载,将class文件读入方法区,然后在 ...
- java 虚拟机内存类_java 虚拟机类加载 及内存结构
在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从"Hello World &q ...
- JAVA虚拟机 安全区域_Java虚拟机的内存区域
2020年12月10日 阅读 186 关注 Java虚拟机的内存区域 最近在看<深入理解Java虚拟机>,故此写下自己的学习笔记. JVM 运行时数据区域 Java 虚拟机在执行 Java ...
- java 虚拟机的原理_java虚拟机的原理
所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,Visual Box .Vmare就属于系统虚拟机.他们完全是对物理计算机的仿真 ...
- java对象的内存结构_JAVA 对象内存结构
JAVA对象内存结构 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 对象头 markWo ...
- linux java main 参数设置_Java虚拟机参数设置
"MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remai ...
- java虚拟机工作原理图_Java虚拟机工作原理
首先我想从宏观上介绍一下Java虚拟机的工作原理.从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文 ...
- java多线程内存模型_Java多线程内存模型
Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果.在此之前 ...
- java中为什么还要防止内存泄露_JAVA防止内存的泄漏什么意思,内存还能泄露?...
展开全部 尽管java虚拟机和62616964757a686964616fe59b9ee7ad9431333166353066垃圾回收机制管理着大部分的内存事务,但是在java软件中还是可能存在内存泄 ...
最新文章
- 大数据量,海量数据 处理方法总结(转)
- 下载股票代码的历史数据并打包成csv
- webbrowser 百度列表点击_前嗅ForeSpider采集教程:关键词的「检索列表」采集「检索结果」...
- wxWidgets:创建应用程序的 DLL
- 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三
- Linux io内存存在的意义~
- vue中的uri_浅谈vue-resource和vue-axios的区别
- 深入探讨MFC消息循环和消息泵(一)
- FTP文件传输协议介绍和常用命令
- MySQL 联合索引测试2
- 《数学之美》—Google AK-47的设计者
- 如何查看xbox账号所在服务器,Xbox账号绑定教程
- 微信浏览器下载APK文件的实现方案
- steam搬砖项目超完整版实操免费分享
- 信息学奥赛一本通 欧拉回路
- pandas数据合并之pd.concat()用法
- EVE模拟器完整路由拓扑实验报告
- 淘客怎么利用抖音评论引流?
- 批量识别条形码和二维码
- SpringBoot系列之切换log4j日志框架
热门文章
- java 蓝牙指定连接失败_java – Android蓝牙连接 – 服务发现失败
- 具体案例 快速原型模型_工业/产品设计流程案例---智能手表设计:从创意到模型(一)...
- python列表元祖字典集合运算_Python基础5:列表 元祖 字典 集合 Json
- 谷歌浏览器设置请求头_2020年 谷歌SEO优化 十大技巧(四)
- 关于计算机网络维护毕业论文,计算机专业毕业论文---计算机网络故障处理及维护方法...
- ARCore-Unity3d教程2 - 基本概念
- memset初始化类对象出错解析
- Python 2 结束支持,Ubuntu 20.04 LTS 继续进行将其移除的工作
- Win10 应用程序新的图标流出,微软正在为其改头换面
- LINQ to CSV,一种类型安全,动态的高性能方法