java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足
内存泄露
什么是内存泄露?
在维基百科上的定义如图:
中文意思就是一个对象在内存中,而程序无法获取此对象,于是不能释放该对象所占用的内存。
百度百科上的定义如图:
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 内存泄露、内存溢出、内存不足相关推荐
- java堆和非堆_java 堆与非堆 内存
堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.&q ...
- java 句柄泄露_Java 文件句柄泄露问题解决小记
Coding 技术小馆是 Coding 主办的技术沙龙,2018.1.20 将在深圳与大家探讨<高效 Workflow 实践> ,开放报名中,点击了解更多 维护 WebIDE 免不了要管理 ...
- java 解决内存泄露_Java内存泄露的理解与解决
Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...
- 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...
JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 内存泄漏 & 内存溢出 1. 内存泄漏(memory leak ) 申请了内存用完了不释放,比如一共有 1024M ...
- java查看内存泄露_Java内存泄露如何排查
Java内存泄露是常常出现的问题,Java攀登网进行了该问题的整理,具体的如下所示: 1.2 内存泄露Memory Leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内 存泄露危害可以忽略 ...
- java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。
前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...
- 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法
最近朋友推荐了一篇关于内存溢出与内存泄漏的文章,感觉写的还不错,于是便在网上搜索了一番,对这块进行了加固,发现自己之前写的代码也存在一些内存泄漏的风险,所以弄懂内存泄漏与内存溢出是很有利于我们提高代码 ...
- java heap space 什么意思_java内存溢出之Java heap space
作为一个java程序员,大家都应该认识JVM.JVM作为java的核心,实在太重要了.而内存溢出又是程序员常遇到的错误之一,如果你对JVM的原理足够了解,那么解决这样的问题就不在是一件困难的事情. 关 ...
- js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏
js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...
最新文章
- 我读过的最好的epoll讲解--转自”知乎“ 【转】
- C#获取邮件客户端保存的邮箱密码
- C++,Java编程空指针的一个小细节
- GEO2R/GEOquery的结果可能是错的!!!
- 从0到1告诉你搭建完整Python+requests接口自动化测试框架!
- 论跨境电商ERP系统与wms仓储管理系统之间有何区别和联系?
- java 父类_java 调用父类的父类
- mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍
- Linux:搭建web服务器(二)
- “三只猫,三分钟,捉三只老鼠,多少只猫,一百分钟,捉一百只老鼠”有感
- RuoYi-Vue——关于登录后不同角色跳不同页面
- STM32 阿里云MQTT esp8266 AT命令
- 快递鸟即时查询接口的连接和使用
- 接口测试必知必会知识点
- Mybatis的where标签,还有这么多知识点
- 项目七总结 创建于使用触发器
- 使用tensorflow和Keras的初级教程
- 系统稳定性指标计算器
- 常见几种视频渲染模式介绍
- 生产设备管理指标有哪些?
热门文章
- MATLAB数字信号处理函数
- IEEE754标准中32位、64位浮点数的取值范围
- 5.2.2 OS之I/O设备假脱机技术(SPOOLing)
- failed building wheel for termcolor_for循环优化,List分组,多线程的写法
- 简易计算器里的小数点在程序中怎么表示_财管普通计算器(内有彬哥经验)
- linux socket API / bind
- 启明云端分享|ESP32-S3一颗融合AI和IOT于一体的芯片,到底有哪些功能!能应用在哪些场景呢
- 【Windows Phone】Metro设计语言
- 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
- Linux命令应用大词典-第1章 登录、退出、关机和重启