`
换个号韩国红果果
  • 浏览: 48374 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类

js delete 删除机理以及它的内存泄露问题的解决方案

    博客分类:
  • web
阅读更多
delete删除属性时只是解除了属性与对象的绑定,故当属性值为一个对象时,删除时会造成内存泄露  (其实还未删除)
举例:
var person={name:{firstname:'bob'}}
var p=person.name
delete person.name
p.firstname  -->'bob'
// 依然可以访问p.firstname,存在内存泄露!!
 

解决方法,用递归!!
//为何不刚开始就将deleteprop设为递归函数??因为它只有一个值,而若它是对象则内层属性可能存在多个,递归的条件是1. 子问题须与原始问题为同样的事,且更为简单:2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
不满足第一条,故必须在内层设置deleteDeep为递归函数!!
function  deleteprop(prop){
	//var current=obj;
	if(typeof prop ==='object')
		deleteDeep(prop)
	
	else
		delete prop;
	function  deleteDeep(current){// 递归函数,循环属性值,对于每一个值,若依然为对象则进行递归
		for(var i in current){
			if(typeof current[i] ==='object')
				deleteDeep(current[i])//或者用  arguments.callee(current[i])
			else
				delete current[i];//expert出口
		}
	}
	
}

举例:
person={name:{
first:'bob',
last:'amy',
relative:{
           mother:'amy',
           father:'peter'}
              }
         }

var p=person.name.relative;//注意:对象拷贝是引用不是拷贝
p  -->{
           mother:'amy',
           father:'peter'}
              }
deleteprop(person.name)

p-->{}//说明已删除!!
由此解决了delete的内存泄露问题
分享到:
评论

相关推荐

    GDB查找内存泄露

    内存泄露是程序开发中常见的问题,它会导致程序长时间运行后消耗过多内存,进而引发系统性能下降甚至崩溃。GDB(GNU Debugger)是一个强大的调试工具,能够帮助开发者在C/C++等语言的程序中查找和定位内存泄露的问题...

    详解QT内存泄露问题

    ### 详解QT内存泄露问题 在探讨QT内存管理机制及如何避免内存泄露之前,我们首先应当...通过合理利用父子关系、`deleteLater`以及各种内存管理工具,开发者可以构建高效、稳定的Qt应用程序,减少内存泄露问题的发生。

    QT内存泄漏解决方案.rar

    总的来说,解决QT中的内存泄漏问题需要对内存管理有深入的理解,以及熟练使用检测工具。通过结合`Valgrind`、`QApplication`的检查和`Qt Creator`的集成分析,开发者可以有效地找出并修复内存泄漏,从而提高程序的...

    几个内存泄漏的例子

    内存泄漏是C++编程中一个严重的问题,它指的是程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无害,但随着时间推移,大量的内存泄漏会消耗掉系统的可用内存,导致性能下降甚至系统崩溃。...

    c++检测内存泄漏(如何检测内存泄漏)

    在C++编程中,内存泄漏是一个常见的问题,它发生在程序分配了内存但未能正确释放时。这可能导致系统资源的浪费,严重时甚至可能导致程序崩溃。本文将深入探讨如何检测C++程序中的内存泄漏,主要通过重载的方式进行。...

    JavaScript避开内存泄露及内存管理技巧_.docx

    本文将详细讲解JavaScript中的内存泄露问题和解决方案。 一、什么是内存泄露? 内存泄露是一种错误的编程实践,它会导致程序占用越来越多的内存,直到系统崩溃。JavaScript中的内存泄露通常是由于对象的生命周期不...

    source_delete_new.rar_hook delete_内存泄露_重载new

    总结来说,"source_delete_new.rar_hook delete_内存泄露_重载new"提供的解决方案是通过重载`new`和`delete`,并利用钩子技术,创建一个内存监控系统,以预防和追踪内存泄露问题。这种方法对于优化程序性能,提升...

    浅谈内存泄漏(1)——内存泄漏的定义

    解决内存泄漏的方法包括采用智能指针来自动管理内存,使用垃圾回收(Garbage Collection)机制,或者编写更严格的代码审查和测试流程,确保在所有可能的退出路径上都正确地释放了内存和资源。在C++中,RAII...

    VC内存泄露检查 VC内存泄露检查 VC内存泄露检查

    本文将深入探讨VC内存泄露检查的相关知识点,帮助开发者有效识别和解决这一问题。 1. **内存泄露的概念** 内存泄露是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄露可能不明显,但如果长时间...

    MySQL DELETE 删除语句加锁分析1

    在MySQL中,DELETE语句的加锁行为是数据库事务处理的重要组成部分,尤其是在并发环境中,正确理解其加锁机制对于避免死锁和提高系统性能至关重要。本篇文章主要探讨了在不同隔离级别下,针对不同索引类型的DELETE...

    C++内存管理,如何防止内存泄漏

    在C++编程中,内存管理是一项至关重要的任务,因为它直接影响到程序的性能和稳定性。由于C++不提供自动垃圾回收机制,程序员需要手动分配和释放内存,这既赋予了我们高度的灵活性,也带来了潜在的内存泄漏风险。下面...

    内存泄漏如何正确理解.doc

    ### 内存泄漏的理解 #### 一、内存泄漏的基本概念 在计算机科学领域,**内存泄漏**(Memory Leak)指的是程序...同时,结合实际案例分析,能够更深入地认识到内存管理的重要性以及如何有效地避免和解决内存泄漏问题。

    IOCP测试(内存泄露问题)

    标题中的“IOCP测试(内存泄露问题)”指出的是一个关于使用I/O完成端口(IOCP,I/O Completion Port)的测试过程中遇到的内存泄漏问题。在Windows系统中,I/O完成端口是一种高效的多线程I/O模型,用于处理大量的并发I...

    c++生成二维码-修复内存泄露

    - 检测内存泄露的方法包括静态分析工具(如`Valgrind`)、动态分析工具(如`LeakSanitizer`)以及自定义的内存管理策略。 - 通过这些工具,开发者可以定位到未释放的内存块及其分配源,找出内存泄露的原因。 5. *...

    有内存泄露程序

    内存泄露是程序设计中常见的问题,它发生在程序分配了内存但未能正确释放,导致系统资源逐渐耗尽。在这个“有内存泄露程序”的案例中,我们主要关注的是如何识别和解决内存泄露的问题。MFC(Microsoft Foundation ...

    C和C++内存管理资料(包括内存管理-内存泄漏-内存调试-内存检测方法)

    内存管理是C和C++编程中的核心技能,它涉及到内存分配、释放以及如何避免内存泄漏等问题。本篇将围绕标题和描述中的知识点进行深入探讨。 首先,我们关注的是"内存管理"。在C和C++中,程序员需要手动管理内存,这...

    内存泄露定位.zip

    内存泄露是编程中一个常见的问题,特别是在C++等语言中,由于手动管理内存,程序员需要负责释放不再使用的内存。然而,如果不正确地释放内存,就会导致内存泄露,随着时间的推移,程序会消耗越来越多的系统资源,...

    35_内存泄漏是什么1

    本文将详细介绍几种典型的内存泄漏情况以及如何判断和解决这些问题。 首先,堆内存泄漏是最常见的类型。当使用malloc、realloc、new等动态内存分配函数后,程序员必须确保在不再需要这些内存时通过free或delete进行...

Global site tag (gtag.js) - Google Analytics