摘自kakaluyi的<如何定位OutOfMemory的根本原因>,有部分修改
java的OutOfMemory有关Exception和可能出现的方式:
A Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
public static void main(String[] args) {
//使用List保持着常量池引用,压制Full GC回收常量池行为
List<String> list = new ArrayList<String>();
// 10M的PermSize在integer范围内足够产生OOM了
int i = 0;
while (true) {
list.add(String.valueOf(i++).intern());
}
}
永久区溢出
这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域(包括常量池: 静态变量),它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
B java.lang.OutOfMemoryError: Java heap space
public static void main(String[] args) {
//使用List保持着常量池引用,压制Full GC回收常量池行为
List<String> list = new ArrayList<String>();
// 10M的PermSize在integer范围内足够产生OOM了
int i = 0;
while (true) {
list.add(new String(i++));
}
}
堆溢出
这部分用于存放类的实例。被缓存的实例(Cache)对象,大的map,list引用大的对象等等,都会保存于此。
C Exception in thread "main" java.lang.StackOverflowError
public class JavaVMStackSOF {
private int stackLength = 1;
public void stackLeak() {
stackLength++;
stackLeak();
}
public static void main(String[] args) throws Throwable {
JavaVMStackSOF oom = new JavaVMStackSOF();
try {
oom.stackLeak();
} catch (Throwable e) {
System.out.println("stack length:" + oom.stackLength);
throw e;
}
}
}
栈溢出
这部分用于存放局部变量、方法栈帧信息。栈帧太多,也就是函数调用层级过多时就会出现此异常,检查是否有死递归的情况。
今天碰到个内存溢出的问题,解决过程如下:
- 首先启动时添加参数-XX:+HeapDumpOnOutOfMemoryError,这样当内存溢出时:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid5304.hprof ...
Heap dump file created [85357895 bytes in 2.095 secs]
- 会在eclipse目录下生产内存文件;
- 使用Memory Analyze分析,查看类使用情况,发现是由Map过大引起;
- 查看代码中使用到Map的段,分析,解决问题;
问题over。
分享到:
相关推荐
在Python编程过程中,有时会遇到一个令人头疼的问题——"out of memory",即内存不足。这个问题通常发生在程序尝试分配超出系统可用内存的空间时。当Python解释器无法为新对象分配足够的内存时,它会抛出`Memory...
7. **监控内存使用**:利用Android的`ActivityManager`或第三方工具如MAT(Memory Analyzer Tool),可以分析应用的内存使用情况,找出内存泄漏和不必要的内存占用。 通过以上方法,开发者可以有效地管理和控制...
在使用PyTorch进行深度学习模型的训练和测试过程中,可能会遇到“显存溢出”(Out of Memory,OOM)的问题。这个问题通常是由于GPU内存不足以存储所有计算所需的张量而导致的。以下是一些解决PyTorch训练与测试时...
然而,当处理大量图片时,特别是在用户滚动时实时加载,可能会遇到内存溢出(Out Of Memory,简称OOM)的问题。这是因为Android系统为每个应用程序分配的内存有限,而加载大图或大量图会消耗大量内存。因此,我们...
在Android开发中,内存管理是至关重要的,尤其是避免内存溢出(Out of Memory,简称OOM),这可能导致应用程序崩溃。为了防止这种情况,开发者需要对程序进行优化,主要关注三个方面:内存引用、图像处理以及资源...
1. **理解导致OutOfMemory条件的原因** 2. **使用Tivoli Performance Viewer检测内存溢出状况** 3. **获取详细的垃圾收集(GC)日志** 4. **获取Java堆内存快照(Heap Dump)** 5. **解读详细的垃圾收集日志** 6. **...
然而,不是每个人都拥有或熟悉Microsoft Project,这时就需要像Steelray Project Viewer这样的第三方软件来帮助我们查看和分析这些文件。本文将深入探讨Steelray Project Viewer的功能、安装过程以及如何利用它来...
OOM(Out Of Memory)导致的panic:当系统内存资源耗尽,内核无法找到可杀进程时,会触发“Kernel panic - not syncing: Out of memory and no killable processes...”。这类问题通常与内存管理有关,可能涉及某些...
因此,如果大量类被加载到 JVM 中而没有适当增加 PermGen space 的大小,就很容易出现内存溢出的情况。 #### 三、PermGen space 溢出的原因分析 1. **应用程序依赖大量 jar 包**:现代应用往往包含大量的第三方库和...
2. **内存分配不合理**:某些情况下,由于配置不当导致JVM启动时分配的堆内存过小。 3. **内存泄漏**:程序中存在长时间未被释放的对象引用,导致垃圾回收机制无法正常工作,从而逐渐耗尽可用内存。 4. **并发线程...
客户端和服务器服务通过中间件进行通信,该中间件支持三种用于请求/响应数据的缓冲区:任意字符串,字节数组,统一缓冲区格式(UBF),JSON缓冲区。 建立和测试状态 作业系统 状态 作业系统 状态 作业系统 状态 ...
经分析,这是由于 DBCP 连接池 BUG 引起的,数据库连接不上后,没有将连接释放,最终使得 DBCP 报“OutOfMemory”错误。经过修改正确数据库连接参数后,就没有再出现内存溢出的错误。 第三步,安排有经验的编程人员...
当一个程序运行时,如果它请求的内存超过了系统可以分配的限制,就会触发"Out Of Memory"错误,这是一个常见的编程问题,特别是在处理大数据集或者复杂计算时。在这个场景中,我们关注的是Linux环境下针对此类错误的...
当遇到Jupyter启动卡死的情况时,通常有以下几种可能的原因: 1. **配置文件问题**: Jupyter 的配置文件`jupyter_notebook_config.py`中的某些设置可能导致启动异常。 2. **资源占用过高**: 如果电脑内存或CPU资源...
图片加载是内存消耗的大户,合理使用`BitmapFactory.Options`设置解码参数,避免加载过大图片导致OOM(Out Of Memory)错误。 9. **内存快照和比较**: 通过对比不同时间点的内存快照,可以找出内存占用增加的...
因此,在本文中,我们将介绍如何设置Tomcat的初始启动内存,从而解决Out Of Memory的问题。 一、理解Java程序的内存分配 在Java程序中,JVM(Java Virtual Machine)会分配一个初始内存和最大内存给应用程序。初始...
2. **OutOfMemory (OOM) Error**: 当内存使用率达到极限时,系统可能会启动内存保护机制,自动终止某些进程以释放内存资源。例如,在日志中可能会出现类似`kernel: Out of memory: Kill process <processID> () ...
在Android系统中,内存管理是开发者必须关注的重要一环,因为不当的内存使用可能导致应用程序崩溃或者性能下降,其中最严重的后果就是出现“内存溢出”(Out Of Memory, OOM)。本文将深入探讨如何在Android平台上...
例如,如果在`CONFIG.SYS`文件中没有正确配置`EMM386.EXE`或者分配的扩展内存(Extended Memory)和高内存区(High Memory Area, HMA)不够充足,就容易导致内存不足的问题。 - 此外,如果在DOS下运行的程序占用的...
第二步,检查错误日志,查看"OutOfMemory'错误前是否有其它异常或错误。通过检查错误日志,可以找到内存溢出前的错误或异常,并对其进行修复。 第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。需要...