XMLHttpRequest对象垃圾回收

XMLHttpRequest对象

function getData(){

  var xmlhttp = new XMLHttpRequest();

  xmlhttp.onreadystatechange = handler;

  xmlhttp.open(method, url, async);

  xmlhttp.send(data);

}

XMLHttpRequest对象的5种状态

UNSET(数字值为 0)

对象已创建。

OPENED(数字值为 1)

open() 方法已经成功调用。在此期间可以使用 setRequestHeader() 方法来设置请求头,并且可以调用 send() 方法来请求。

HEADERS_RECEIVED(数字值为 2)

所有的重定向都已经跳转(如果有的话),并且已经接收到了所有的HTTP响应头。

LOADING(数字值为 3)

响应的主体部分正在接收。

DONE(数字值为 4)

数据传输已经完成或者传输过程中出现错误(例如无限重定向)。

初始的 XMLHttpRequest 对象为UNSET状态。

send() 标志表示 send() 方法已经被调用。它初始状态不被设置,在 OPENED状态期间被调用。

不能被垃圾回收情况:

(1)如果 XMLHttpRequest 对象的状态是 OPENED并且已设置标识。

(2)状态是HEADERS_RECEIVED

(3)状态是LOADING且对以下是件注册了一个以上的事件监听: readystatechangeprogressabouterrorloadtimeoutloadend。

如果 XMLHttpRequest 对象在连接尚存打开时被垃圾回收机制回收了,用户代理必须终止请求。

XMLHttpRequest对象设置为未被引用

所以xmlhttp设置为null时,即不指向XMLHttpRequest对象时,XMLHttpRequest对象可能不能被垃圾回收,仍然可正常处理事件,如readystatechange事件。

参考:

[1]https://www.w3.org/html/ig/zh/wiki/XMLHttpRequest

时间: 2024-09-29 09:49:07

XMLHttpRequest对象垃圾回收的相关文章

简易对象垃圾回收框架 for Delphi

(一).缘起 1.1 我的一个出错程序 程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端. 开发工具:Delhpi 5 相关技术:客户端通过与服务端建立Socket连接来模拟一组电话机的拨入.按键.等待.挂机等过程.服务端对Socket事件以及收到的数据包进行预处理,并转化为抽象的呼叫模型数据,然后发送给更上层的呼叫处理模块.由于呼叫处理模块是硬件无关的(与语音板卡.交换机类型均无关),因此通过此压力测试工具可以比较真实地模拟海量呼叫,以达到测试呼叫处理模块程序的逻辑正确性及其性能的目的

Python __del__方法:销毁对象 垃圾回收机制

与 __init__() 方法对应的是 __del__() 方法,__init__() 方法用于初始化 Python 对象,而 __del__() 则用于销毁 Python 对象,即在任何 Python 对象将要被系统回收之时,系统都会自动调用该对象的 __del__() 方法. 当程序不再需要一个 Python 对象时,系统必须把该对象所占用的内存空间释放出来,这个过程被称为垃圾回收(GC,Garbage Collector),Python 会自动回收所有对象所占用的内存空间,因此开发者无须关

Java内存管理和垃圾回收

Java运行时内存区域 程序计数器,线程独占,当前线程所执行的字节码的行号指示器,每个线程需要记录下执行到哪儿了,下次调度的时候可以继续执行,这个区是唯一不会发生oom的 栈,线程独占,包含虚拟机栈或native method stack,用于存放局部变量的 堆,线程共享,用于分布对象实例的,后面说的内存管理和垃圾回收基本都是针对堆的 方法区,线程共享,用于存放被虚拟机加载的类,常量,静态变量; Java虚拟机规范,把方法区描述为堆的逻辑部分,所以也被称为“永久代”,在大量使用反射,动态代理,C

Java垃圾回收(GC)机制详解

垃圾回收算法有两种,根据不同的虚拟机策略不同 1.引用计数法 2.可达性分析法 由于我们平常使用的hotspot虚拟机用的是第二种. 那哪些是可达的呢? 这个算法的基本思想是通过一系列称为"GC Roots"的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的.在Java语言中可以作为GC Roots的对象包括: · 虚拟机栈中引用的对象 · 方法区中静态属性引用的对象

垃圾回收算法和JVM垃圾收集器(一)

参考文献:深入理解Java虚拟机 周志明 Java编程思想 Bruce Eckel 为什么自动化垃圾回收后还要了解GC呢:当需要排查各种溢出.内存泄漏问题时,当垃圾收集成为系统达成更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节. 垃圾回收的主要区域:Java堆和方法区 那么,如何判断对象是否已经可以回收呢?主要有两种方法: 一.引用计数算法:每个对象都有一个引用计数器,当有引用连接至对象时,引用计数器加1:当引用计数器离开引用作用域被置null时,引用计数减1.垃圾回收

垃圾回收 GC

垃圾回收器的回收的对象: 垃圾回收只回收托管堆中的内存 什么样的对象才会被回收? 没有变量引用的对象.没有变量引用的对象,表示可以被回收了(null. 什么时间回收? 不确定,当程序需要新内存的时候开始执行回收. GC.Collect(); //手动调用垃圾回收器.不建议使用,垃圾回收时会暂停一下(非常短暂)让程序自动去GC. 垃圾回收----代 一共有3代 第一次垃圾回收时,如果没什么内存回收,GC会提升3代的内存. 当内存不够用的时候,抛异常. .net中垃圾回收机制 mark-and-co

jvm内存模型和垃圾回收

堆与栈分开设计是为什么呢? 栈存储了处理逻辑.堆存储了具体的数据,这样隔离设计更为清晰 堆与栈分离,使得堆可以被多个栈共享. 栈保存了上下文的信息,因此只能向上增长:而堆是动态分配 栈的大小可以通过-XSs设置,如果不足的话,会引起java.lang.StackOverflowError的异常 栈区 线程私有,生命周期与线程相同.每个方法执行的时候都会创建一个栈帧(stack frame)用于存放 局部变量表.操作栈.动态链接.方法出口. 堆 存放对象实例,所有的对象的内存都在这里分配.垃圾回收

Java垃圾回收-GC

判定对象是否属于垃圾: 判断对象的引用数量 通过判断对象的引用数量来决定,是否被回收,引用数量=0,被当做垃圾处理 每个对象实例,都有一个引用计数器,被引用+1,完成引用-1 优点:执行效率高,程序执行影响较小 缺点:无法检测循环引用的情况,导致内存泄露 可达性分析算法 通过判断对象的引用链是否可达,来决定对象是否可以被回收 可以作为GC Root的对象,如下: 虚拟机栈中引用的对象(栈帧中的本地变量表) 方法区中常量引用的对象 方法区中的类静态属性引用的对象 本地方法栈中的Native方法的引

.Net 垃圾回收和大对象处理

CLR垃圾回收器根据所占空间大小划分对象.大对象和小对象的处理方式有很大区别.比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪些潜在的影响. 大对象堆和垃圾回收 在.Net 1.0和2.0中,如果一个对象的大小超过85000byte,就认为这是一个大对象.这个数字是根据性能优化的经验得到的.当一个对象申请内存大小达到这个阀值,它就会被分配到大对象堆上.这意味着什么呢?要理解这个,我们需要理解.Net垃圾回收机制. 如大多人