`
jiazurongyu
  • 浏览: 16842 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

内存泄露笔记

 
阅读更多

内存泄露和什么有关?

内存泄露和硬件没有关系,它是由软件设计缺陷引起的。

程序角度来看内存泄露:

内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,造成那一部分内存不可用的情况。

定义变量,实例化对象,new一些方法,然后通过delete的方法销毁。但是定义数量过多,而产生的遗忘。

内存泄露的危害:

内存不断在攀升,长时间下来积累了就占用了大量的内存空间,导致其他进程无法获取到内存资源,无法去处理其他应用,最后服务就shut down

检查的办法:

工具推荐:

windows性能计数器,系统自带

spotlight,开源

windowslinux平台的一些不同的做法。

Win7下:

windows下一般监控的参数是系统可用物理内存,可用虚拟内存,进程占用物理内存和进程占用虚拟内存,并且监控进程句柄数(Handle Count)和工作集(working set).

一般如果只出现虚拟内存涨或者物理内存单方面涨,不代表一定有内存泄露,也有可能是系统进行了资源位置转存,将物理内存中的数据移动到了虚拟内存中,或者反过来;如果出现在某一操作中,内存占用升高,这个操作结束后,内存恢复到原来的水平,也不会是需要检查的内存泄露点。该部分可以做为查看内存回收%指标。

工作集是一个非常重要的指标,如果发现进程working set和进程占用的物理内存都有提高,并且一直没有降下来,那么说明可能存在内存泄露。

推荐使用脚本的方式进行多次的调用,重点观察,并取得数据,一切以数据来说话
分享到:
评论

相关推荐

    dotnet 读 WPF 源代码笔记 Stroke 类可能存在的内存泄露.rar

    本文主要关注一个特定的问题:`Stroke`类在WPF中可能引发的内存泄露问题,以及如何理解和解决这个问题。 `Stroke`类在WPF中是用来表示形状边框的,它与`Geometry`对象配合,用于定义图形的外观。例如,一个`Path`...

    WIN32内存管理笔记

    - 未初始化的内存可能导致数据泄露或错误,总是确保分配的内存被正确初始化。 - 避免悬挂指针,确保释放内存后不再引用它。 - 使用`VirtualProtect()` API可以改变内存保护设置,防止越界写入。 6. **内存优化**...

    Android笔记 Application对象的使用-数据传递以及内存泄漏问题

    本篇笔记将深入探讨`Application`对象的使用,包括如何利用它进行数据传递以及如何避免常见的内存泄漏问题。 首先,让我们了解`Application`的基本概念。在Android系统启动时,会先创建`Application`实例,然后依次...

    《深入理解LINUX内存管理》学习笔记

    9. **内存保护**:通过页表项的权限位,Linux确保进程不能非法访问其他进程或内核的内存,防止数据泄露和恶意操作。 10. **内存泄漏检测**:程序运行过程中,如果不再使用的内存没有正确释放,就会导致内存泄漏。...

    java学习笔记(java 反射机制 流 内存管理)

    内存泄露是常见的问题,当不再使用的对象仍然被引用,无法被垃圾收集器回收。此外,栈内存用于存储方法局部变量,随着方法的调用和返回自动管理。 四、基础Java学习 学习Java的基础涉及语法、控制结构、异常处理、...

    C++学习笔记:关于C++类与动态内存分配中布局new操作符

    在C++中,释放内存是非常重要的,以避免内存泄露。在使用new操作符分配内存时,我们可以使用delete操作符来释放内存。例如: delete pc2; 但是,在使用布局new操作符分配内存时,我们不能直接使用delete操作符来...

    UnixC课堂笔记

    - `malloc()`使用双向链表维护内存分配,越界访问可能导致内存泄露。 - `brk/sbrk`用于调整数据段的结束地址,`mmap()`提供更高级的内存分配方式,适用于大块内存的分配。 9. **内存映射** - 内存映射将物理内存...

    申延超_嵌入式Linux应用开发完全手册笔记_内存管理单元MMU

    1. **进程隔离**:MMU通过虚拟地址空间的划分,使得每个进程拥有独立的内存视图,防止数据泄露或破坏其他进程的内存。 2. **内存保护**:MMU能够设置访问权限,如读、写、执行等,防止非法访问和操作,提高系统的...

    马老师jvm调优实战笔记

    垃圾回收是 JVM 中的一个重要机制,它用于回收不再使用的对象,避免内存泄露。垃圾回收算法有多种,包括 Mark-Sweep 算法、Copy 算法、Mark-Compact 算法等。 4.1 Mark-Sweep 算法 Mark-Sweep 算法是最经典的垃圾...

    笔记本主板维修原理图 惠普HP-DV3

    这些信息可能涉及产品的核心竞争力,因此未经授权不得随意泄露或使用。在实际操作中,维修人员应当严格遵守相关规定,保护好这些敏感资料。 总之,惠普HP-DV3笔记本电脑的主板原理图是一份非常宝贵的资源,它不仅为...

    清华大学java学习笔记

    在 Java 运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。 代码安全性检查机制 字节码的执行需要经过三...

    Android基础面试笔记

    #### 一、内存泄露的原因及避免方法 **内存泄露定义**: 内存泄露是指在程序运行过程中,已经不再使用的对象没有被及时地回收,从而占用内存资源,导致可用内存逐渐减少。 **内存泄露的根本原因**: - **长生命...

    二维码扫描笔记源代码--简单好用

    - **性能优化**:考虑到Android设备的多样性,优化扫描速度、内存占用和电池消耗是很重要的。例如,选择合适的扫描库,优化数据库查询,以及减少不必要的后台操作。 6. **安全性**: - **数据安全**:保存的笔记...

    Go 学习笔记 第四版

    3. **垃圾回收**:Go语言内置了垃圾回收机制,自动管理内存,降低了程序员管理内存的负担,同时也减少了内存泄露的风险。 4. **接口**:Go语言的接口设计独特,只需定义一组方法即可构成接口,无需显式声明,这使得...

    无标题的笔记本.pdf

    * 指针的使用可能会导致内存泄露或野指针的出现。 * 指针的使用需要小心,避免出现指针的溢出或越界访问。 六、指针的应用 指针在编程语言中有很多应用,例如: * 动态内存分配:指针可以用来动态地分配内存,...

    JVM学习笔记2018-4-151

    `Deallocate` 方法则用于释放之前通过 `Allocate` 分配的内存,确保内存不会泄露。 在JVM中,内存管理是一个关键的方面,因为它涉及到性能和稳定性。有效的内存管理可以防止内存泄漏,保持系统的高效运行。`...

Global site tag (gtag.js) - Google Analytics