java 关于内存泄漏和内存溢出

内存溢出和内存泄漏的区别

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

例如:

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

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

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

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

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

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

例如:

  1. 静态集合类:集合容器中的对象在程序结束前得不到释放,会造成内存堆积;
  Vector v=new Vector(10);
  for(int i=0;i<10;i++){
    Object o=new Object();
     v.add(o);
   }
  1. 各种连接:数据库连接,网络连接,以及io连接,连接后得不到关闭,
  2. 监听器:在使用多个监听器后,释放了对象,而没有删除监听器,也可能导致内存溢出;
  3. 变量不合理的作用域:如果一个变量的定义的作用范围大于其使用范围,还有,没有及时把对象设置为null,可能这是我们比较经常出现的问题,所以有一些变量我们可以设置为方法作用范围内,当方法使用完,就释放了。

原文地址:https://www.cnblogs.com/liu-ya/p/9672296.html

时间: 2024-10-10 09:38:20

java 关于内存泄漏和内存溢出的相关文章

Android 系统开发_内存泄漏篇 -- &quot;内存泄漏&quot;的前世今生

基础了解 什么是内存泄漏? 内存泄漏是当有程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是指由程序分配的内存,由于程序逻辑错误而导致程序失去了对该内存的控制,使得内存浪费. Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是?静态分配?.?栈式分配?和?堆式分配?,对应的三种存储策略使用的内存空间主要分别是?静态存储区(也称方法区)?.?栈区?和?堆区?. -?静态存储区(方法区):主要存放?静态数据?.?全局

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

如何使用 Chrome 和 DevTools 查找影响页面性能的内存问题,包括内存泄漏、内存膨胀和频繁的垃圾回收

了解如何使用 Chrome 和 DevTools 查找影响页面性能的内存问题,包括内存泄漏.内存膨胀和频繁的垃圾回收. TL;DR 使用 Chrome 的任务管理器了解您的页面当前正在使用的内存量. 使用 Timeline 记录可视化一段时间内的内存使用. 使用堆快照确定已分离的 DOM 树(内存泄漏的常见原因). 使用分配时间线记录了解新内存在 JS 堆中的分配时间. 概览 在 RAIL 性能模型的精髓中,您的性能工作的焦点应是用户. 内存问题至关重要,因为这些问题经常会被用户察觉. 用户可通

java内存泄漏与内存溢出

https://www.cnblogs.com/panxuejun/p/5883044.html 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory: 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光. memory leak会最终会导致out of memory! 以发生的方式来分类,内存泄漏可以分为4类: 1. 常

JAVA内存泄漏和内存溢出的区别

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光. memory leak会最终会导致out of memory! 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产

JAVA内存泄漏和内存溢出的区别和联系

1.内存泄漏memory leak : 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出. 2.内存溢出 out of memory : 指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出. 3.二者的关系: 内存泄漏的堆积最终会导致内存溢出内存溢出就是你要的内存空间超过了系统实际分配给你的空间,

内存泄漏,内存溢出

内存溢出(out of memory):指程序申请内存时,没有足够的空间供其使用: 内存泄漏(memory leak):指程序申请了一块内存,但是这块内存不能被释放. 内存泄漏最终会导致内存溢出. 内存泄漏,简单来说就new之后没有delete,然后就丢失了对象的指针,没法释放了.在C++中这可能会造成很严重的后果:Java有垃圾回收机制,会把没有被引用的内存回收,但是垃圾回收器各个JVM的实现并不同,效率也无法保证,因此还是要保持良好的编程习惯,及时释放内存.

内存泄漏和内存溢出的优化

内存泄漏: 对象在内存heap堆中中分配的空间, 当不再使用或没有引用指向的情况下, 仍不能被GC正常回收的情况. 多数出现在不合理的编码情况下, 比如在Activity中注册了一个广播接收器, 但是在页面关闭的时候进行unRegister, 就会出现内存溢出的现象. 通常情况下, 大量的内存泄漏会造成OOM. OOM: 即OutOfMemoery, 顾名思义就是指内存溢出了. 内存溢出是指APP向系统申请超过最大阀值的内存请求, 系统不会再分配多余的空间, 就会造成OOM error. 在我们

内存泄漏与内存溢出

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory: 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光. ## memory leak会最终会导致out of memory! 内存泄漏 长生命周期的对象引用短声明周期的对象,导致短生命周期的对象在生命周期已结束后还无法回收对象内存 ,造成内存泄漏 场景 1.静态集合引用