StringBuilder 导致堆内存溢出】的更多相关文章

在上一章中我们介绍了JVM运行时参数以及jstat指令相关内容:[JVM教程与调优] 什么是JVM运行时参数?.下面我们来介绍一下jmap+MAT内存溢出. 首先我们来介绍一下下JVM的内存结构. JVM内存结构介绍 从图中我们可以看到,JVM的内存结构分为两大块.一块叫堆区,一块叫非堆区. 堆区又分为两大块,一块Young,一块叫Old.Young区又分为Survivor区和Eden区.Survivor区我们又分为S0与S1.可以结合下图进行理解 非堆区呢,是属于我们操作系统的本地内存.它是独…
今天在进行使用 jxl 进行 Excel 下载时,由于数据量大(4万多条接近5万条数据的下载),数据结构过于负责,存在大量大对象(虽然在对象每次用完都设置为null,但还是存在内存溢出问题),加上本地电脑内存不大(只有8G),导致下载数据时报堆内存溢出,下载失败. Exception data: java.lang.OutOfMemoryError at jxl.write.biff.MemoryDataOutput.write(MemoryDataOutput.java:72) at jxl.…
抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现. 第一步:导出堆转储文件 我们可以使用Jdk自带的jmap工具.使用命令:jmap -dump:file=DumpFileName.log,format=b pid; DumpFileName.log指的是导出的文件路径,pid指的是抛异常的进程Id.因为文件导出需要一定的时间,这时候如果是生产环境急需恢复正常的话可以在启动进程时在jvm参数上加上-XX:+Heap…
Java堆内存溢出 只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常,代码如下: import java.util.ArrayList; import java.util.List; public class HeapOOM { static class OOMObject { } public static void main(String[] args) { List<OOMObject>…
[情况一]: java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环: 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm-arg>-Xms3062m</jvm-arg> <jvm-arg>-Xmx3062m</jvm-arg> [情况二] java.lang.OutOfMemoryError: GC overhead limit…
场景:新开发的功能内测,新调用了其它模块的接口,一如既往的点鼠标,计费,但是许久都没有响应页面遮罩一直锁着,最后抛出了以下异常 咋一看这个异常信息,不就是锁表了吗?把锁表进程Kill掉,再来一遍,结果还是同样的异常,锁表的异常只是最终的结果,是什么导致的锁表呢? 于是到JBoss服务器寻求更多的异常信息,找到线索. 查看JBoss服务器日志发现了内存溢出的情况,查看堆栈信息发现在业务代码的78行, StringBuilder在进行append时,出现的异常.转移突破点,分析代码: 先给大家提一个…
MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件.     不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析.     另外,有很多的工具,例如 JMap,JConsole 都可以帮助我们得到一个堆转储文件. 1.一键式的堆存储分析功能     生成分析报告 首先,启动安装配置好的 Memory Ana…
eclipse 有启动参数里设置jvm大小,因为eclipse运行时自己也需要jvm,所以eclipse.ini里设置的jvm大小不是具体某个程序运行时所用jvm的大小,这和具体程序运行的jvm大小无关.  那么怎么才能设置某个程序的jvm大小呢(当然控制台运行的话不会存在这个问题,如:java -Xms256m -Xmx1024m classname,这样就可以把当前程序的jvm大小给设定)?  因为eclipse里默认的一个程序的jvm配置为:-Xms8m -Xmx128m,所以我们的处理耗…
这几天遇到了一个问题,不幸开发的一个cs架构的工具,客户端开启后,内存一直在缓慢增长最终导致进程卡死,花了4天时间,终于爬出来了... 客户端通过timer定时器每30秒查询一次数据库以及一些业务逻辑操作,然后刷新界面的表格数据. 但是每次调用方法后,都会导致内存的增长,然后我将方法内部的变量在使用完之后手动设置为null 而且最后调用了gc 但是都没有什么效果, 最终还是会导致内存溢出,进程卡死.(估计是释放的速度,赶不上增长的速度...) 之后对定时部分的代码逐段进行了排查,最后发现是由于…
今天发现一个奇怪的问题,一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码——想用这个jsp页面配合tomcat完成一个性能验证.但是用jmeter压测了几分钟之后,分配了1024M堆内存的tomcat居然抛出了heap space outofmemory!这个页面的代码如下: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pag…