1.首先这里先说一下内存溢出和内存泄露的区别:

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

memory leak会最终会导致out of memory!

2.我们这里做一个内存溢出的例子

/*** VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError* @author Administrator**/public class TestDump {static class OOB {}public static void main(String[] args) {List<OOB> list = new ArrayList<OOB>();while (true) {list.add(new OOB());}}}

其中-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError是需要加的JVM启动参数

-Xms20m将堆的最小值设置为20MB,-Xmx20m将堆的最大值设置为20MB,当设置一样时即可避免堆自动扩展。

-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在内存溢出时Dump当前的内存堆转储快照以便事后进行分析。

运行结果:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6256.hprof ...
Heap dump file created [27904625 bytes in 0.098 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:2245)at java.util.Arrays.copyOf(Arrays.java:2219)at java.util.ArrayList.grow(ArrayList.java:242)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)at java.util.ArrayList.add(ArrayList.java:440)at com.webservie.TestDump.main(TestDump.java:18)

异常信息java.lang.OutOfMemoryError: Java heap space。解决该区域问题,一般先通过内存印象分析工具(如Eclipse Memory Analyzer)对Dump出来的堆转储快照进行分析,重点是确认内存中的对象是否是必要的,

要就是先要分清楚到底是出现了内存泄露还是内存溢出。

java_pid6256.hprof就是生成的快照,可以在类所在的工程根目录下找到。

打开该快照文件,如图所示:

如果是内存泄露,可进一步通过工具查看泄露对象到GC Roots的引用链。于是就能找到泄露对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收它们的。

掌握了泄露对象的类型信息及GC Roots引用链的信息,就可以比较准确的定位出泄露代码的位置。

如果不存在泄露,就是内存中的对象确实都还必须存活着,就应该检测虚拟机的堆参数(-Xmx和-Xms),与机器物理内存对比,看看是否可以调大,从代码上检查是否存在某些

对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期的内存消耗。

转载于:https://www.cnblogs.com/feiyangbahu/p/10362019.html

Java内存溢出和内存泄露后怎么解决相关推荐

  1. java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足

    内存泄露 什么是内存泄露? 在维基百科上的定义如图: 中文意思就是一个对象在内存中,而程序无法获取此对象,于是不能释放该对象所占用的内存. 百度百科上的定义如图: OWASP上的定义: 开发者无法释放 ...

  2. java内存泄漏跟栈溢出,8.《深入理解Java虚拟机》内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别...

    内存溢出和内存泄露的区别 内存溢出:指的是程序在申请内存的时候,没有足够大的空间可以分配了. 内存泄露:指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无 ...

  3. java什么时候可能产生内存溢出_JAVA内存泄露和内存溢出

    1)概念: 内存溢出:指在指定大小的内存空间,写入了超出大小的数据,从而导致了内存溢出. 内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误. 内存溢出通常发生于OLD段或Perm段垃圾回 ...

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

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

  5. 一位面试官询问我:Java中的JVM内存溢出和内存泄露是什么?我这么回答成功拿到了offer

    一位面试官询问我:Java中的JVM内存溢出和内存泄露是什么?我这么回答成功拿到了offer. 墨眉无锋墨家代码 2020-11-22 20:16:50 10525 收藏 56 分类专栏: Java ...

  6. Android之内存泄露、内存溢出、内存抖动分析

      内存 JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆.栈和方法区. 栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放.优点:速度快. 堆(heap) ...

  7. 内存溢出、内存泄露和FULL GC

    内存溢出和内存泄露 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory: 比如:内存中加载的数据量过于庞大,如一次从数据库取出过多数 ...

  8. 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...

    JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 内存泄漏 & 内存溢出 1. 内存泄漏(memory leak ) 申请了内存用完了不释放,比如一共有 1024M ...

  9. 内存溢出、内存泄露的概述及常见情形

    内存溢出(OutofMemoryError) 简述 java doc 中对 Out Of Memory Error 的解释是,没有空闲内存,并且垃圾收集器也无法提供更多内存. JVM 提供的内存管理机 ...

最新文章

  1. TCP 网络应用程序开发流程
  2. 成为你向往的那只独角兽——《独角兽项目》出版在即
  3. php smtp tls,php – RoundcubePostfix SMTP:SSL例程:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c...
  4. 浅谈安卓线程池相关问题
  5. SAP HANA Cloud 简介
  6. 打乱数组排序的算法shuffle
  7. html旅游网站设计与实现——绿色古典旅游景区 HTML+CSS+JavaScript
  8. 《Linux程序设计》第4版 核心笔记
  9. 镜像css3,CSS下镜像翻转(水平/垂直翻转)
  10. 全国计算机城市排名,这五大城市教育资源全国领先,各城市优质高校排行榜一定要收藏!...
  11. 解决 jq ui 弹框 select2 input 失效问题
  12. 量化投资教父爱德华·索普人生路:打败赌场 战胜股市
  13. 【opencv4.3.0教程】09之转换颜色空间(cvtColor)及类型(convertTo)
  14. 上周技术关注:疯狂的社会性应用开发平台-NING
  15. 服务器集群可视化监控-Prometheus+Grafana
  16. MonoDevelop花括号(大括号)自动补全
  17. mysql取多字段各自合计_sql实现多字段求和并查询
  18. 用一条sql语句判断两个日期是否处于同一月份!
  19. IndexedDB基本操作学习总结
  20. 个人开源项目视频播放器~ERPlayer

热门文章

  1. 树莓派 使用读卡器修改WIFI连接配置
  2. android 单选框 icon,Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解...
  3. springmvc中Controller方法的返回值
  4. Java核心技术点之多线程2
  5. [UVa1213]Sum of Different Primes(递推,01背包)
  6. haskell读写文件相关(含二进制)
  7. ios UIScrollView 中控件自动增加间隔
  8. Android网络连接监听
  9. [转]Linux系统中用户帐户清洁与安全方法
  10. linux程序员的proc文件系统