什么是内存泄漏?有什么危害
1、什么是内存泄漏
内存泄漏是指你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一直占据内存单元,造成系统将不能再把它分配给需要的程序。
一次内存泄漏的危害可以忽略不计,但是内存泄漏堆积则后果很严重,无论多少内存,迟早会被占完,造成内存泄漏。
2、引起内存泄漏的原因
1、分配给程序的内存忘记回收;
这个是不应该发生的事情,但也是代码中常见的问题。分配的内存用完之后,就一定要回收,避免造成内存泄漏。
2、程序代码有问题,造成系统没有办法回收;
Temp1 = new BYTE[100];
Temp2 = new BYTE[100];
Temp2 = Temp1;
这样,Temp2的内存地址就丢掉了,而且永远都找不回了,这个时候Temp2的内存空间想回收都 没有办法。
3、某些API函数操作不正确,造成内存泄漏;
3、内存泄漏的危害
1、频繁GC:系统分配给每个应用的内存资源都是有限的,内存泄漏导致其他组件可用的内存变少后,一方面会使得GC的频率加剧,再发生GC的时候,所有进程都必须等待,GC的频率越高,用户越容易感应到卡顿。另一方面内存变少,可能使得系统额外分配给该对象一些内存,而影响整个系统的运行情况。
2、导致程序运行崩溃:一旦内存不足以为某些对象分配所需要的空间,将会导致程序崩溃,造成体验差。
4、Java的垃圾回收机制GC
原文地址:https://blog.csdn.net/zy_jibai/article/details/80957169
1、CG的作用:释放掉不可到达的对象的内存。
2、不可达是个什么概念?
首先我们要搞清楚Java的内存分区了,其中有两个非常重要的就是栈内存和堆内存
- 堆内存存放创建的对象的内存
- 栈内存存放指向对象的引用和普通数据类型
例如创建一个变量:String str1 = new String("test");
由此可以说明Java操作对象全部都是匿名操作。在创建之初,每一个堆内存中对象的内存,在栈中都会有一个值(引用)指向他,而有一部分值在我们使用完毕后会将引用置空,这就会有一些堆中的内存没有引用指向,又因为Java中对对象是匿名操作,所以对这些没有栈中内存存储的引用指向的对象称之为不可触及的对象。
工作原理
简单介绍一下GC的工作原理:
首先GC会扫描栈内存中的引用,然后会遍历堆内存中的引用,这样就会查找出内存中不可触及的对象,然后将其释放掉。
说到这里大家应该发现一个问题,GC回收的只是堆中的内存,而没有栈中的内存,这是因为栈中已分配的内存会随着哟个方法结束的时候释放掉,所以不用担心栈内存中会存在内存泄漏的问题。
PS:定义变量的时候,慎用static,例如静态的集合中的数据都不会被回收
什么是内存泄漏?有什么危害相关推荐
- Android 如何有效的解决内存泄漏的问题
前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...
- Android内存泄漏定位、分析、解决全方案
为什么会发生内存泄漏 内存空间使用完毕之后未回收, 会导致内存泄漏.有人会问:Java不是有垃圾自动回收机制么?不幸的是,在Java中仍存在很多容易导致内存泄漏的逻辑(logical leak).虽然 ...
- Android内存泄漏查找和解决adb shell dumpsys meminfo packagement
1.通过adb shell dumpsys meminfo packageName来查看内存使用状况 在没有打开应用的情况下,该命令返回的数据是这样的: 2.打开这个应用的MainActivity,再 ...
- Android内存泄漏查找和解决
Android内存泄漏查找和解决 目录: 内存泄漏的概念 一个内存泄漏的例子 Java中"失效"的private修饰符 回头看内存泄漏例子泄漏的重点 强引用与弱引用 解决内部类的内 ...
- 【Unity】内存泄漏危害及处理方式(腾讯WeTest分析使用)
WeTest导读 本文通过对内存泄漏(what)及其危害性(why)的介绍,引出在Unity环境下定位和修复内存泄漏的方法和工具(how).最后提出了一些避免泄漏的方法与建议. 在之前推送的文章< ...
- 内存溢出的危害_内存溢出和内存泄漏的区别
点击关注,我们共同每天进步一点点! 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了lo ...
- 什么是内存泄漏?有什么危害?
1.什么是内存泄漏 内存泄漏是指你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一 ...
- 内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)
一.定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请 了一个integer,但给它存了long才能存 ...
- 内存泄漏和内存溢出的关系和区别
作者:不怕天黑_0819 链接:https://www.jianshu.com/p/61d34df7eabe 一.内存泄漏(memory leak) 1.内存泄漏是指程序中已动态分配的堆内存由于某种原 ...
最新文章
- java tablemodel_高级组件——表格模型TableModel
- Microsoft Dynamics CRM 2013 试用之系统篇 正式安装 Microsoft Dynamics CRM Server 2013
- FPGA之道(25)VHDL数据类型转换函数与数据对象的属性
- 【yml】YAML 语言教程--- 字符串
- 图文结合分析Spring的面向切面编程--AOP
- boost::remove_copy相关的测试程序
- 朴素贝叶斯方法(Naive Bayes)原理和实现
- 桌面虚拟化在学生教室及机房的应用案例
- Linux 释放cpugpu内存、显存和硬盘
- Mac OS/Linux命令查询网络端口占用情况
- 导入开源的文件云存储平台-Seafile
- 浅谈ARMv8-A系列CPU的架构
- python 保证所有数据能够显示,而不是用省略号表示,不以科学计数显示
- 正确的使用URLClassLoader--ClassNotFoundException: com.mathworks.toolbox.javabuilder.internal.MWComponentI
- 十步一拆:iPhone4S拆机十步曲
- 利用EXCEL对数据进行比对,以及提取有效数据
- 74HC138译码器的原理和使用
- 详细介绍MATLAB导入文本文件、excel等数据文件
- puppet kick 报错返回值code3 求解答(finished with exit code 3)
- Sniffing_Spoofing Report