一、Java内存管理机制
- 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。
- 从申请分配、到使用、再到最后的释放。
- 这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。
- Java语言对内存管理做了自己的优化,这就是垃圾回收机制。
- Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),
- 然后由GC(garbage collection)负责自动回收不再使用的内存。
二、垃圾回收机制
- 我们在实际的项目开发中仍然会遇到内存泄漏的问题。
- 也许有人表示怀疑,既然Java的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?
- 这个问题,我们需要知道GC在什么时候回收内存对象,什么样的内存对象会被GC认为是“不再使用”的。
- Java中对内存对象的访问,使用的是引用的方式。
- 在Java代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。
- 在Java程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。
- GC线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。
- 如果GC线程通过这种方式,无法跟踪到某一块堆内存,那么GC就认为这块内存将不再使用了(因为代码中已经无法访问这块内存了)。
- 通过这种有向图的内存管理方式,当一个内存对象失去了所有的引用之后,GC就可以将其回收。
- 反过来说,如果这个对象还存在引用,那么它将不会被GC回收,哪怕是Java虚拟机抛出OutOfMemoryError
三、内存泄漏
- 一般来说内存泄漏有两种情况。
- 一种情况如在C/C++语言中的,在堆中的分配的内存,
- 在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指针重新赋值);
- 另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。
- 第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解决。
- 所以,Java中的内存泄漏,主要指的是第二种情况。
四、示例
参见hashCode示例
相关推荐
利用VC++6.0撰写内存泄漏检测的方法
后台程序中经常会存在一部分内存泄露,但是不能很好的定位造成内存泄露的代码,并进行修改,内存泄露不进行修改就会造成程序运行时占用的内存不断升高,逐渐的导致系统的不稳定,现将前一段时间通过GDB调试工具查找内存...
最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递getApplicationContext。 1.避免在xml直接写webview...
linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测
linux 内存泄露排查文档。 介绍mtrace的使用。根据实际问题介绍如果定位问题。
LeakDiag和LDGrapher,windows内存泄漏排查工具,用于进行一些泄漏位置的查找以及可视化展示。
几个内存泄漏的例子 new和delete要成对使用 new和delete要匹配 经常看到一些C++方面的书籍中这样提及到内存泄漏问题,这样的说法的意思是比较明白,但对于初学C++程序员还是很难掌握,所以下面举几个反面的...
opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.
windows下c++内存泄露检测工具使用方windows下c++内存泄露检测工具使用方
electron-vue开发环境内存泄漏问题汇总.docx
C++ 内存 泄露 检测器 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题
JS内存泄漏检测工具:IEJSLeaksDetector
检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏
用于freertos嵌入式实时系统内存泄漏检测,可以实时查看内存状况,具体平台是ESP32
Android处理内存泄漏的代码例子。用于演示避免内存泄漏的几种方法,包括:关闭游标、重用适配、回收图像、注销监听、释放引用。
JProfiler对应用服务器内存泄漏问题诊断解决方案
VLD是一款用于VisualC++的免费内存泄漏检查工具。可以在codeproject.com网站上找到,相比其它的内存泄漏哦给你根据,他在检查内存泄漏的同事,还具有如下特点: 1) 可以得到内存泄漏点的调用堆栈,如果可以的话,...
介绍了使用内存泄漏检测工具valgrind的安装和使用,内附安装包,测试程序,使用说明文档。
如何解决Java内存泄漏
windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题