`

out memory 内存溢出总结

    博客分类:
  • web
阅读更多
http://lan0725.blog.chinajavaworld.com/entry/5241/0/

根据网上的各种资料以及个人的经验
出现内存泄露有好多情况的,主要jvm耗费了太多的内存,部署大系统时,如果内存设置不合理也会报错,还有程序方面的问题等等。
分两种情况:
1 内存不够用。 比如parse一个大的xml,读一个大的文件。比如GC的速度赶不上系统运行期间开辟内存的速度,内存使用峰值超过了JVM参数设置范围。
2 内存泄漏。在内存中某个类的实例在不断增加,可能是有某个全局变量引用了它,所以垃圾回收机制无法回收这些实例。


具体的可能有以下这些原因:
1. java设置内存的参数是否合适
2. 频繁的大数据量并发处理,比如查询数据库,遇到比较大的数据集,或者sql写的效率比较低。我遇到过数据集太大,生成报表或者到导入大批量数据,造成内存外溢;
3. java处理文件的时候,文件比较大
4. i/o ,数据库连接,结果集没有正确close
5. 频繁创建大对象
6. 集合类的不正确使用
7. JNI(Java Native Interface)内存泄漏
8. 系统启动某些功能时,瞬间需要大量内存(只是瞬间,意会还会释放的)
9. 加载生成类太多,如 spring
10. 用tools.jar直接编译超大的java文件
11. fixedthreadpool 线程执行速度太慢,插入速度太快
12. IBM的jvm里频繁生成大对象后会形成不少碎片。IBM的jvm没有碎片整理归并,导致后期的大对象分配内存时出现dump的情况
13. JVM创建的thread过多
14. 调用了第三方库,内存没有得到释放
15. 我用webwork+spring应用的时候,重启应用经常发生内存溢出,我一直怀疑是spring的ioc与xwork的ioc兼容上有问题。
16. 在finalize() 终结方法的使用不当,导致outofmemory.所以我们要慎重使用此方法哦。
原因:GC释放声明有finalize()方法的对象前,都要先调用finalize()方法。如果finalize()方法中又调用了收集堆中的对象,此收集堆中的对象就会复活,或者会复活自身。这样GC需要下一次运行时再次扫描此对象,并且要标志此finalize()方法是否已经运行过了;这样极有可能造成反复的gc扫描,内存的消耗从而加剧。
17. 无限循环的线程,死锁,问题也会导致JVM OUT OF MEMORY
18. 由于内存泄漏导致内存在系统运行期间不断增大,超出JVM参数设置范围


解决方案:
第一种情况,增加虚拟机的内存,在java启动的时候可以指定 -xmx参数。
第二种情况,可以借用一些工具去监视虚拟机内存,并拍一些快照,通过比较快照,去发现到底那个java对象在不断增加而无法释放。

解决这个问题最主要的是,先从你自己的程序代码出发,引起这个异常的原因太多。一旦出现这个异常,先逐步的调试程序,确认代码没有任何问题。在这个前提下,再从面所说的方面寻找解决方法。当然,这只是我个人的理解。

Out Memory问题是一个引子,需要从jvm、应用、服务器性能等多方面优化调整,但是个人认为最核心问题在于应用方面,大多数OM问题是由big Object、大数据集处理、小对象大量创建占用、sql语句不合理、Hibernate配置不当等引起。jvm和服务器性能调整相对还是比较容易的。
分享到:
评论

相关推荐

    内存泄漏与内存溢出

    在软件开发领域,尤其是涉及到数据库应用的场景下,内存泄漏(Memory Leak)和内存溢出(Out of Memory,简称OOM)是两个常见的问题,它们直接影响到程序的性能、稳定性和可扩展性。以下是对这两个概念及其相关知识...

    MySQL OOM(内存溢出)的解决思路

    OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...

    Python内存泄漏和内存溢出的解决方案

    2. **检查错误日志**:寻找“OutOfMemory”错误前的异常。 3. **代码审查**:查找可能的内存溢出点,如数据库一次性查询所有数据、死循环、大量重复对象生成以及未清理的集合对象。 4. **使用内存分析工具**:实时...

    解决jetty8内存溢出版本

    内存溢出(Out of Memory,OOM)通常发生在系统无法分配足够的内存给程序运行时,这可能导致服务器崩溃或性能急剧下降。 标题中的"解决jetty8内存溢出版本"意味着我们面对的是一个针对Jetty 8的特殊构建或配置,其...

    内存溢出解决

    当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM)。这通常发生在堆内存或方法区等内存区域耗尽时。对于Java应用而言,了解如何有效识别并解决内存溢出...

    HBuilderX uniapp打包内存溢出解决放案.zip

    uniapp项目体量过大时,打包H5会报错, - process out of memory 解决放案: 替换HBuildX内置\HBuilderX\plugins\node\node.exe版本 添加\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\...

    android 轻松避免内存溢出

    在Android开发中,内存管理是至关重要的,尤其是处理图片资源时,经常遇到内存溢出(Out Of Memory,简称OOM)的问题。本项目提供了一个在Android 1.6 SDK环境下编写的工具类,旨在帮助开发者有效地避免内存溢出,...

    Android 内存溢出问题

    然而,如果应用程序在短时间内分配大量内存,或者持有大量无法释放的对象引用,就可能导致内存溢出(Out Of Memory,OOM)。 例如,错误信息"02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte ...

    基于HeapAnalyzer456.jar 分析java内存溢出

    在Java编程环境中,内存溢出(Out of Memory)是一个常见的问题,它会导致应用程序崩溃或性能急剧下降。为了解决这个问题,开发人员需要有效地诊断和分析内存的使用情况。HeapAnalyzer456.jar 是一个专门用于分析...

    idea git提交内存溢出后dump文件

    内存溢出(Out Of Memory,OOM)是Java应用程序中常见的问题,它通常发生在程序请求的内存超过了JVM(Java虚拟机)分配的内存空间。 在Java世界中,JVM负责管理应用程序的内存,包括为对象分配和回收内存。当程序...

    eclipse内存溢出的解决办法.txt

    在使用Eclipse开发工具的过程中,经常会出现“内存溢出”(Out of Memory Error)的问题,这主要是由于Eclipse运行时所分配的内存不足导致的。当出现这种情况时,不仅会影响开发效率,还可能造成项目的延误。本文将...

    Eclipse运行工程内存溢出解决方法

    内存溢出(Out of Memory,OOM)是计算机编程和运行时常见的问题,尤其在Java这样的内存管理自动化的环境中。Eclipse作为一个流行的Java开发IDE,它在运行大型或资源密集型工程时,可能会遇到内存不足的情况,导致...

    加载大图片的时候如何防止内存溢出

    在 Android 系统中,加载大图片时经常会出现内存溢出的问题,这是因为 Android 系统给图片分配的内存只有 8M,当加载大量图片时,很容易超出这个限制,导致 OOM(Out of Memory)错误。为了解决这个问题,我们需要...

    JAVA内存溢出详解.doc

    Java内存溢出(Out Of Memory,OOM)是Java应用程序运行时常见的问题,它通常发生在程序对内存需求超过了Java虚拟机(JVM)所能提供的可用内存时。本文将深入探讨Java内存溢出的原因、表现以及如何解决。 1. **Java...

    MyEclipse 内存溢出

    MyEclipse是基于Eclipse的一款强大的Java集成开发环境,对于内存管理不当,可能会出现内存溢出(Out Of Memory,OOM)的问题,这会影响开发效率,甚至导致IDE崩溃。 【描述】虽然描述部分为空,但通常内存溢出问题...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    防止内存溢出浅析

    内存溢出(Out of Memory,简称OOM)是计算机科学中的一种常见问题,特别是在资源有限的移动设备如Android手机上,处理不当可能导致应用崩溃。本文将深入浅谈如何防止Android应用程序中的内存溢出。 首先,我们需要...

    websphere内存溢出

    1. **内存溢出概述**:内存溢出(Out Of Memory,OOM)是Java应用中常见的问题,当应用程序请求的内存超过了JVM分配的内存空间时,就会出现这种情况。对于WebSphere来说,这可能表现为服务器崩溃、应用程序响应缓慢...

    Java 内存溢出解决办法

    Java内存溢出问题通常指的是程序在试图分配内存时,无法找到足够的连续内存空间而抛出的异常。在Java中,内存分为几个区域:堆(Heap)、栈(Stack)、方法区(Method Area,Java 8后被元空间取代)以及程序计数器和...

Global site tag (gtag.js) - Google Analytics