什么是内存泄漏,今天先简单的说一下

TestWhite 2018年4月12日00:15:05
评论
983字阅读3分16秒
云小站

  今天看到有人在后台给我留言说要讲一些内存泄漏的文章,小编就找了几篇,整合了一些内容给大家讲一下,今天先简单的讲一下,因为今天加班完了,大家先看看今天的文章,之后还有更多的知识点,等着你哦

 

Java最显著的优势之一就是它的内存管理机制。你只需简单创建对象,然后Java垃圾回收机制便会小心的分配和释放内存。然而,事实并非如此简单,因为在Java应用程序中经常发生内存泄漏。

 

本教程说明了什么是内存泄漏,为什么会发生,以及如何防止它们。

 

1.什么是内存泄漏?

 

内存泄漏的定义: 对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用。

 

要理解这个定义,我们需要理解对象在内存中的状态,下图说明了哪些是未被使用的以及哪些是未被引用的。

 

什么是内存泄漏,今天先简单的说一下

 

从图中可以看到被引用的对象和未被引用的对象。未被引用的对象将会被垃圾回收器回收,而被引用对象则不会被回收。未被引用的对象理所当然是未被使用的,因为没有其他的对象引用它。然而,未被使用的对象并不一定是未被引用的,其中一些是被引用的。这就是内存泄漏的起因。

 

2.为什么会发生内存泄漏?

 

让我们来看看下面这个例子,看看为什么内存泄漏会发生。在如下例子中,对象A引用了对象B。A的生命周期(t1—t4)要比B的生命周期(t2—t3)长很多。当B不再用于应用中时,A仍然持有对它的引用。在这种方式下,垃圾回收器就不能将B从内存中移除。这将可能导致出现内存不足的问题,因为如果A对更多的对象做同样的事情,那么内存中将会有很多无法被回收的对象,这将极度耗费内存空间。

 

也有可能B持有大量对其他对象的引用,这些被B引用的对象也不能够被回收。所有这些未被使用的对象将会耗费宝贵的内存空间。

 

什么是内存泄漏,今天先简单的说一下

 

3.如何阻止内存泄漏?

 

以下是一些阻止内存泄漏的快速动手技巧。

(1)注意集合类,例如HashMap,ArrayList,等等。因为它们是内存泄漏经常发生的地方。当它们被声明为静态时,它们的生命周期就同应用程序的生命周期一般长。

(2)注意事件监听器和回调,如果一个监听器已经注册,但是当这个类不再被使用时却未被注销,就会发生内存泄漏。

(3)“如果一个类管理它自己的内存,程序员应该对内存泄漏保持警惕。”[1] 很多时候当一个对象的成员变量指向其他对象时,不再使用时需要被置为。

部分图文来源网络,如有侵权联系删除

觉得文章不错就点个赞呗,转发就更好了

继续阅读
  • 我们QQ群
  • QQ扫一扫
  • weinxin
  • 微信公众号
  • 公众号扫一扫
  • weinxin
TestWhite
  • 本文由 发表于 2018年4月12日00:15:05
  • 请您在转载时请务必保留本文链接:https://www.playezu.com/11944.html
软件测试流程规范之开发提测内容规范 测试术语

软件测试流程规范之开发提测内容规范

前言 近期在测试一个项目的过程中,发现在开发提测内容时,提测的模块不明确,提测之前没有做开发自测,造成了测试过程中的阻塞(block)问题,并且大大增加了沟通成本;在开发不充分的情况下提测了,接下来...
软件测试覆盖率策略 测试术语

软件测试覆盖率策略

 测试覆盖率的基本策略 软件测试覆盖率简介  1、定义:覆盖率是用来度量测试完整性的一个手段,同时也是测试技术有效性的一个度量。  2、计算:覆盖率=(至少被执行一次的item数)/item的总数 ...
测试中的“杀虫剂怪事”是指什么? 测试术语

测试中的“杀虫剂怪事”是指什么?

之前小编不是有说过自己之前搭建的环境过时了吗?由于小编今天小编测试的产品小编更新测试的好几个版本了,所以功能都相当的熟,所以测试起来很快,发现的bug也少,然后提交给公司的内部人员使用时,发现了几个问...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: