内存泄露

什么是内存泄露?

在维基百科上的定义如图:

中文意思就是一个对象在内存中,而程序无法获取此对象,于是不能释放该对象所占用的内存。

百度百科上的定义如图:

OWASP上的定义:

开发者无法释放某块不会再使用的内存。

用C语言解释一下,例如:

#include void function_which_allocates(void) {

/* allocate an array of 45 floats */

float * a = malloc(sizeof(float) * 45);

/* additional code making use of 'a' */

/* return to main, having forgotten to free the memory we malloc'd */

}

int main(void) {

function_which_allocates();

/* the pointer 'a' no longer exists, and therefore cannot be freed,

but the memory is still allocated. a leak has occurred. */

}

程序中的指针a所指向的那块内存在函数退出后并没有释放。malloc申请的是堆内存,正常情况下,使用完后要调用free来释放该内存。

但是在java里面,java有垃圾收集器(Garbage Collection,GC),会自动收集垃圾,也就是不用的内存。所以,C语言里的情况,在java里不会出现,但是会有另外一种内存泄露的情况出现,例如:

Listlist = new ArrayList();

for (int i = 0; i < 100; i++) {

Object o = new Object();

list.add(o);

o = null;

}

此时,所有的Object对象都没有被释放,因为变量list引用这些对象。如果要释放这些对象,应该调用:‘

list.clear();

但是,如果程序一直没调用clear,就有可能发生内存泄露。

所以,java和C里面的内存泄露是不一样的,区别:

C:没有指针指向不再使用的内存,故无法释放那块内存。

java:有引用指向不再使用的内存,但是并没有去释放那块内存。

内存溢出

英文叫memory overflow。与缓冲区溢出类似。比如,char ch[10],却输入11个char进去。

但是很多人直接把内存溢出当成内存不足了。

内存不足

英文叫out of memory。申请内存时,没有足够的空间。

内存泄露最终会导致内存不足。

另外,可以参考IBM上的文章http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足相关推荐

  1. java堆和非堆_java 堆与非堆 内存

    堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.&q ...

  2. java 句柄泄露_Java 文件句柄泄露问题解决小记

    Coding 技术小馆是 Coding 主办的技术沙龙,2018.1.20 将在深圳与大家探讨<高效 Workflow 实践> ,开放报名中,点击了解更多 维护 WebIDE 免不了要管理 ...

  3. java 解决内存泄露_Java内存泄露的理解与解决

    Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...

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

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

  5. java查看内存泄露_Java内存泄露如何排查

    Java内存泄露是常常出现的问题,Java攀登网进行了该问题的整理,具体的如下所示: 1.2 内存泄露Memory Leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内 存泄露危害可以忽略 ...

  6. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。

    前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...

  7. 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法

    最近朋友推荐了一篇关于内存溢出与内存泄漏的文章,感觉写的还不错,于是便在网上搜索了一番,对这块进行了加固,发现自己之前写的代码也存在一些内存泄漏的风险,所以弄懂内存泄漏与内存溢出是很有利于我们提高代码 ...

  8. java heap space 什么意思_java内存溢出之Java heap space

    作为一个java程序员,大家都应该认识JVM.JVM作为java的核心,实在太重要了.而内存溢出又是程序员常遇到的错误之一,如果你对JVM的原理足够了解,那么解决这样的问题就不在是一件困难的事情. 关 ...

  9. js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏

    js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...

最新文章

  1. 我读过的最好的epoll讲解--转自”知乎“ 【转】
  2. C#获取邮件客户端保存的邮箱密码
  3. C++,Java编程空指针的一个小细节
  4. GEO2R/GEOquery的结果可能是错的!!!
  5. 从0到1告诉你搭建完整Python+requests接口自动化测试框架!
  6. 论跨境电商ERP系统与wms仓储管理系统之间有何区别和联系?
  7. java 父类_java 调用父类的父类
  8. mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍
  9. Linux:搭建web服务器(二)
  10. “三只猫,三分钟,捉三只老鼠,多少只猫,一百分钟,捉一百只老鼠”有感
  11. RuoYi-Vue——关于登录后不同角色跳不同页面
  12. STM32 阿里云MQTT esp8266 AT命令
  13. 快递鸟即时查询接口的连接和使用
  14. 接口测试必知必会知识点
  15. Mybatis的where标签,还有这么多知识点
  16. 项目七总结 创建于使用触发器
  17. 使用tensorflow和Keras的初级教程
  18. 系统稳定性指标计算器
  19. 常见几种视频渲染模式介绍
  20. 生产设备管理指标有哪些?

热门文章

  1. MATLAB数字信号处理函数
  2. IEEE754标准中32位、64位浮点数的取值范围
  3. 5.2.2 OS之I/O设备假脱机技术(SPOOLing)
  4. failed building wheel for termcolor_for循环优化,List分组,多线程的写法
  5. 简易计算器里的小数点在程序中怎么表示_财管普通计算器(内有彬哥经验)
  6. linux socket API / bind
  7. 启明云端分享|ESP32-S3一颗融合AI和IOT于一体的芯片,到底有哪些功能!能应用在哪些场景呢
  8. 【Windows Phone】Metro设计语言
  9. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
  10. Linux命令应用大词典-第1章 登录、退出、关机和重启