引起内存溢出的原因有很多种,小编列举一下常见的有以下几种:

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

3.代码中存在死循环或循环产生过多重复的对象实体;

4.使用的第三方软件中的BUG;

5.启动参数内存值设定的过小

内存溢出的解决方案:

第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)

第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。

第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

重点排查以下几点:

1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

2.检查代码中是否有死循环或递归调用。

3.检查是否有大循环重复产生新对象实体。

4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

第四步,使用内存查看工具动态查看内存使用情况

java如何避免内存溢出_java怎样防止内存溢出相关推荐

  1. java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别

    JAVA中的内存溢出和内存泄漏分别是什么,有什么联系和区别,我谈谈自己的理解. 内存泄漏(memory leak ):申请了内存不释放,比如100m的内存,分配了10m的内存一直不回收,那么可以用的内 ...

  2. java线程内存溢出_Java常见问题分析(内存溢出、内存泄露、线程阻塞等)

    Java垃圾回收机制(GC) 1.1 GC机制作用 1.2 堆内存3代分布(年轻代.老年代.持久代) 1.3 GC分类 1.4 GC过程 Java应用内存问题分析 2.1 Java内存划分 2.2 J ...

  3. java对象内存模型_Java对象的内存模型

    众所周知,函数调用在内存中是通过压栈,退栈实现的,而Java的方法调用则是在JVM栈中通过栈帧实现的,且所有的Java对象都只在堆上分配内存.那么一个Java对象在堆内存里到底长啥样呢?实际上,当一个 ...

  4. java 内存情况_java查看jvm内存使用情况

    java查看jvm内存使用情况 (2012-03-22 15:50:54) 标签: jvm 内存 虚拟机 分配 it java.lang.Runtime类提供了查看当前JVM内存的使用情况.每个jav ...

  5. java static内存泄漏_Java中的内存泄漏

    内存泄漏是指不再使用的对象持续占有内存空间而得不到及时释放,从而造成内存空间的浪费称为内存泄漏.比如,长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是 ...

  6. java -jar 内存溢出_JAVA系统启动栈内存溢出-StackOverflowError

    JAVA系统启动栈内存溢出-StackOverflowError 线上服务器启动报错日志如下: Caused by: java.lang.IllegalStateException: Unable t ...

  7. java final内存机制_Java中的内存处理机制和final、static、final static总结

    装载自:http://blog.csdn.net/wqthaha/article/details/20923579 Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JV ...

  8. java对象的内存分配_java对象在内存的分配问题

    今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32位机器下,Integer对象的大小是i ...

  9. java imageio 内存问题_java中的内存泄漏ImageIO.read()

    我正在使用ImageIO.read().这是由原始应用的主要方法调用的类是这样的:java中的内存泄漏ImageIO.read() import java.awt.*; import javax.sw ...

最新文章

  1. 环球博览|中国六代机有望5年内问世
  2. “期待已久的UFO报告”公布了
  3. go文件服务器mimetype,网络:什么是 MIME TYPE?
  4. iOS之widget开发(Today Extension)
  5. ubuntu 安装java jdk_「ubuntu安装jdk」Ubuntu安装jdk8的两种方式 - seo实验室
  6. 生成式对抗网络GAN
  7. 【英语学习】【WOTD】ecstatic 释义/词源/示例
  8. Chrome禁止http自动转为https
  9. --随笔--带你轻松理解TCP中的三次握手
  10. xss.haozi练习平台wp
  11. 不使用BHO监控IE窗口事件
  12. 一只小白,在学习delphi.感觉很吃力。。
  13. 【TIC6657 DSP学习笔记】01 工程创建与代码编写——以点亮LED为例
  14. 人工智能前景怎么样 用哪个开发语言比较好
  15. mac下使用ipv6观看电视
  16. 如何使用Arduino制作摩尔斯电报翻译器
  17. Hexo系列(四) NexT主题配置
  18. 使用ArcMap做一个1:5000标准分幅图并编号
  19. 活动预告 | 智能化软件开发微访谈·第二十一期:可观测性与智能化运维
  20. ESP8266获取网络时钟、天气

热门文章

  1. 解决图片间间距的几种方法
  2. 日本 IT 圈神作之书,好懂得可怕
  3. sqlserver跟踪数据库_说说被遗忘的数据库开发职业 - 数据库测试
  4. 我的第一个Java项目实训--家庭记账软件!
  5. Vulnhub实战-MoneyBox
  6. 祝考四六级的朋友们好运
  7. Python遥感图像处理--开篇
  8. 关于springboot /tmp目录
  9. 简单聊下STM32F103的GPIO
  10. 大咖云集!畅谈人工智能应用创新方法论