Exception in thread main java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法...
http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
一直都知道可以设置jvm heap大小,一直用eclipse写/调试java程序。一直用命令行or console加参数跑程序。现象:在eclipse的配置文件eclipse.ini中设置-vmargs -Xms500m -Xmx1024m,在eclipse中直接run 或者debug某些耗内存的程序时依然出现java.lang.OutOfMemoryError: Java Heap Space错误,即通常认为的内存不足,java虚拟机内存不够用。而在命令行加这些参数则有效果,不会出错。这说明一个问题,这些参数根本没有起作用。今天需要在eclipse里调试程序,还没到需要调试的地方就heap error了,在网上搜了很多地方,得到了最终的答案:
选中被运行的类,点击菜单‘run->run...’,选择(x)=Argument标签页下的vm arguments框里
输入 -Xmx800m, 保存运行。
原来还需要对每个project单独设置,汗...
有三种可能导致OutOfMemoryError。首先是,此JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生了一个Bug。这极不可靠。所有JVM都经过充分的测试,并且,如果有人发现这种bug,它将绝对是最高的优先级。因此你可以非常宽心地排除这种可能性。
第二种可能的OutOfMemoryError原因只不过是,你没有为你的应用程序运行时给予足够多的可用内存。这种情况,有两种可能的方案,或者增加 JVM堆可用大小,或者减少你的应用程序所需的内存总量。提高JVM可用堆大小可以简单的使用JVM的 -Xmx 参数。假如你将此参数设置尽可能的大(可用内存极限不要超过系统物理内存,否则你的应用程序将分页并暂停),仍然有以上所提到的内存问题,那么,你需要减 少你的应用程序所可能用到内存总量。减少应用程序内存可能是简单的,你可能允许一些集合过大,例如使用了许多大的缓冲区。或者它过于复杂,要求你重新实现 一些类,乃至重新设计应用程序。
读者 Jams Stauffer 指出有些JVM(例如 sun的 JVMs),还有一个“Perm”参数用来处理JVM结构与类对象。如果你正在使用一个数量非常巨大的类集,它有可能运行在"Perm"空间之外,然后你 需要增加此空间的大小,例如,sun的JVM使用 -XX:PermSize 与 -XX:MaxPermSize 选项。
第三种导致OutOfMemoryError最为常见,无心的对象引用保持。你没有明确无误的释放对象,以致于你的堆增长再增长,直到你没有额外的空间。
处理OutOfMemoryError:
是JVM内部的BUG?不太可能。如果是,这是优先级最高的BUG(为什么还没有人发现它,而你碰到了?)。
没有足够的内存分配给实际运行的应用程序?两种选择:使用-Xmx参数增加堆的最大使用内存(或者使用-XX:MaxPermSize参数增加Perm空 间大小); 或者使用更小的集合/缓冲区/表空间/对象.....,以减少所需要的内存总量,也就是说,可以调整对象大小,重新设计与重新实现你的应用程 序。
无心的对象引用保持?找到保持这些无意引用的源对象,改变它并释放这些对象。在IBM开发者社区的文章纲要式的揭示了这样一个通用的处理过程。这个过程主 要是等到应用程序到达恒定状态--你将期望最多的新创建的对象是临时对象,并且可以被垃圾收集器收集。这常常是在应用程序所有的初始化工作完成之后。
强迫垃圾收集,获得一个堆的对象快照。
做任何工作可能正在导到无意的对象引用保持。
强迫另一次垃圾收集并获得第二次堆的对象快照。
比较这两个快照,观察从第一个快照到第二个快照哪些对象在数量上有所增加。因为你在快照之前强迫垃圾收集,剩下的将是所有被应用程序引用的对象,比较两个快照将准确的标识那些新创建的、保留在应用程序里的对象。
根据你对应用程序的认识,决定两个快照比较中,哪些对象正在无意的保持对象引用。
跟踪前导引用,找到哪些对象正在引用这些无意的保持对象,直到你找到导致此问题的源对象
启动虚拟机的时候,加上一个参数:-Xms800m -Xmx800m就好了
-Xms <size>
设置JVM初始化堆内存大小
-Xmx <size>
设置JVM最大的堆内存大小
如果是应用程序,则:java -Xms800m -Xmx800m 你的类名
如果是tomcat之类的web服务器,在这个服务器的启动文件后面加上这个参数即可。
另外设置环境变量
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
转载于:https://www.cnblogs.com/svennee/p/4081149.html
Exception in thread main java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法...相关推荐
- Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Compressed class space
目录 主要得报错信息如下: 解决办法 主要得报错信息如下: 2022-05-16 07:56:47.702|ERROR|http-nio-8089-exec-11|46|c.g.d.npp.web.c ...
- 【错误记录】Groovy 运行报错 ( Exception in thread “main“ groovy.lang.MissingMethodException: No signature of )
一.报错信息 在使用 Groovy 闭包时 , 会报如下错误 : Exception in thread "main" groovy.lang.MissingMethodExcep ...
- Caused by: java.lang.OutOfMemoryError: Compressed class space 什么问题
2020-12-17 09:46:47.413 [http-nio-8080-exec-91] ERROR o.gil.three.admin.exception.GlobalExceptionHan ...
- OutOfMemoryError:Java堆空间–分析和解决方法
java.lang.OutOfMemoryError:Java堆问题是在支持或开发复杂的Java EE应用程序时可能会遇到的最复杂的问题之一. 这篇简短的文章将为您提供此JVM HotSpot Out ...
- java heap space 什么意思_java内存溢出之Java heap space
作为一个java程序员,大家都应该认识JVM.JVM作为java的核心,实在太重要了.而内存溢出又是程序员常遇到的错误之一,如果你对JVM的原理足够了解,那么解决这样的问题就不在是一件困难的事情. 关 ...
- javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)
[0]README 0.1) 本文旨在给出 java.lang.IllegalArgumentException 异常的原因 和 处理方法, 该异常和 javah 没有半毛钱关系 : 0.2) 本文附 ...
- 错误码500:消息 java.lang.IllegalStateException: (No output folder)无输出目录解决方法
本文的解决方法是刚安装好tomcat后就无法正常运行的情况.不涉及项目 安装tomcat有两种方式,一个是解压缩版本,一个是安装版,当出现这个问题时一般为解压缩版本才出现 提示错误如下:localho ...
- jmeter更改java内存,jmeter内存溢出解决方法
使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms ...
- java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
文章目录 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again异常分析及解决 问题描述: 问题分析: ...
- [JVM-翻译]揭开java.lang.OutOfMemoryError面纱之一
Java.lang.OutOfMemoryError是什么 Java.lang.OutOfMemory是java.lang.VirtualMachineError的一个子类,当Java虚拟机中断,或 ...
最新文章
- 对话计算机史学权威,才知道量子计算机马上要来了
- Centos 下安装Docker 遇到的一些错误
- android LinearLayout添加分隔线
- 那些年我们一起隐藏的bug
- 机器学习NLP领域入门
- Windows10安装IIS服务器
- 《女士品茶》读书笔记
- android导航软件安装,【图】手把手教你安装免费且无需流量的安卓版本凯立德导航软件!...
- Windows10更新错误显示0x8000ffff,易升更新0xc1900107
- 广告词 android,广告语猜猜看
- kubernetes资源管理平台ratel
- 四、网络层(一)网络层的功能
- Python编程基础 第二章 编程练习 (第2轮开课补充)编写程序实现以下功能:计算beg到end之间的所有水仙花数并输出。如果beg到end之间不存在水仙花数,则输出“not found”。
- 通过Cloudreve+云服务器快速搭建一个私人云盘
- 【精选模板】古风汉服影楼摄影PSD源文件,绝美的素材,附带预览图
- Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著
- 2022广航蓝桥杯选拔赛压轴题:取数博弈游戏
- 中文NER任务简析与深度算法模型总结和实战展示
- 一个研究生学历到底值多少钱?为什么现在那么多人选择在职考研?
- 2019年4月-日本双人自由10日游
热门文章
- 推荐歌曲《 起风了》
- SpringBooot:Redis:根据两地经纬度计算距离
- 程序媛:我的痘痘不让我编程
- 计算机的来源知识,计算机的由来计算机从诞生到现在才不过50多年的时间,可是发展却很快,已先后经历了四代,可以说是人丁兴旺。世界上第一台电子计算机1946年诞生于美国,名为埃尼阿克(ENIAC)...
- entity framework 新手入门篇(1)-建立模型
- Chrome debugger调试技巧
- NL驱动表错误导致的性能问题
- UNITY中帧动画的制作
- matlab求椭圆周长,用matlab计算椭圆周长及牛顿迭代的matlab完成
- 先定个小目标,免费360度评价(评估)反馈系统上线,开放部分源码