1、 内存溢出的原因是什么?

内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,造成的内存溢出。如果出现这种现象可行代码排查:

一)是否App中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;

二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象)

三)是否App中使用了大量循环或死循环(循环中用到了大量的新建的对象)

四)检查App中是否使用了向数据库查询所有记录的方法。即一次性全部查询的方法,如果数据量超过10万多条了,就可能会造成内存溢出。所以在查询时应采用“分页查询”。

五)检查是否有数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。

六)检查是否使用了“非字面量字符串进行+”的操作。因为String类的内容是不可变的,每次运行"+"就会产生新的对象,如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出。

如String s1 = "My name";

String s2 = "is";

String s3 = "xuwei";

String str = s1 + s2 + s3 +.........;这是会容易造成内存溢出的

但是String str =  "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; //但是这种就不会造成内存溢出。因为这是”字面量字符串“,在运行"+"时就会在编译期间运行好。不会按照JVM来执行的。

在使用String,StringBuffer,StringBuilder时,如果是字面量字符串进行"+"时,应选用String性能更好;如果是String类进行"+"时,在不考虑线程安全时,应选用StringBuilder性能更好。

七)使用 DDMS工具进行查找内存溢出的大概位置

2、栈溢出的原因

一)、是否有递归调用

二)、是否有大量循环或死循环

三)、全局变量是否过多

四)、 数组、List、map数据是否过大

五)使用DDMS工具进行查找大概出现栈溢出的位置

java栈溢出_java 内存溢出 栈溢出的原因与排查方法相关推荐

  1. linux 内存溢出排查_java 内存溢出 栈溢出的原因与排查方法

    1. 内存溢出的原因是什么? 内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,造成的内存溢出.如果出现这种现象可行代码排查: 一)是否应用中的类中和引用变量过多使用了Static修饰 ...

  2. jvm 内存溢出的多种原因及优化方法

    让我们看一下我们日常在开发过程中接触内存溢出的异常: Exception in thread "main" [Full GCjava.lang.OutOfMemoryError: ...

  3. java内存溢出 栈溢出的原因与排查方法

    java内存溢出 原因与排查方法 1. 内存溢出的原因是什么? 内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,导致剩余的内存不够用,造成的内存溢出.如果出现这种现象可行代码排查: 一 ...

  4. java 溢出与泄露_Java内存溢出与栈溢出

    一.背景知识 1.JVM体系结构 2.JVM运行时数据区 3.JVM内存模型 JVM运行时内存 = 共享内存区 + 线程内存区 3-1.共享内存区 共享内存区 = 持久带 + 堆 持久带 = 方法区 ...

  5. 栈溢出 栈内存溢出_全栈溢出开发人员

    栈溢出 栈内存溢出 This article is part of a web development series from Microsoft. Thank you for supporting ...

  6. java如何避免内存溢出_java怎样防止内存溢出

    引起内存溢出的原因有很多种,小编列举一下常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存 ...

  7. Java中的内存溢出和内存泄漏

    内存泄漏是指程序在申请内存后,无法释放已申请的内存空间.内存溢出是指程序申请内存时,没有足够的内存供申请者使用:或者说提供一块存储int数据的存储空间,但存储了long数据,则结果是内存不够用,报错O ...

  8. 深入理解java虚拟机【内存溢出实例】

    通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...

  9. ​Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子​

    作者 l 会点代码的大叔(CodeDaShu) JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 01 内存泄漏 & 内存溢出 1. 内存泄漏(memory lea ...

  10. 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...

    程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...

最新文章

  1. Mac上使用Jenv管理多个JDK版本
  2. C#LeetCode刷题-广度优先搜索
  3. c++中判断某个值在字典的value中_Python元组、字典、集合的简单介绍
  4. EasyPermisson 动态权限使用例子
  5. 在WPF 4.5中跨线程更新集合
  6. vb6启动时提示安装VS2008 SP1
  7. hadoop常见问题汇总
  8. SpringMVC深度探险(一) —— SpringMVC前传
  9. 约束优化内罚函数c语言程序,约束优化惩罚函数法.pdf
  10. electron-builder打包后没生成latest.yml文件问题
  11. 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】
  12. ChatGPT使用案例之自然语言处理
  13. jquery+easyui培训文档
  14. c语言花卉销售与管理系统,花卉销售与管理系统
  15. 云洲智能在科创板恢复IPO审核,拟募集资金15.5亿元
  16. Codeforces1397 E. Monster Invaders(dp)
  17. 时间窗口算法用matlab,一种基于动态规划算法的时间窗口相关的参与者选择方法与流程...
  18. 虚拟机Linux如何做快照、备份以及快照的使用
  19. 数学基础----标准方差
  20. 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。

热门文章

  1. WEP/WPA/WPA2/WPA3初识
  2. 中南林业科技大学的计算机研究生分数线,2020中南林业科技大学研究生分数线(以及历年复试)...
  3. Alfred workflow使用教程持续更新
  4. Java 10大骚操作写法,亮瞎boss的双眼!
  5. 密度测量:1.密度测量的基础知识
  6. nodejs mysql process_nodeJS之进程process对象
  7. 卡西欧计算器计算一元二次方正组
  8. 重磅:一台电脑两个macOS系统,macOS Big Sur和macOS Monterey切换使用
  9. 714.买卖股票含手续费
  10. java 图片 变黑_JAVA 压缩图片导致背景变黑