关于内存屏蔽 和内存泄漏的解决

第一:程序在运行时内存实际的访问顺序和程序代码编写的访问顺序不必定一致,这就是内存乱序访问。内存乱序访问行为出现的理由是为了提高程序运行时的性能。内存乱序访问主要发生在两个阶段:html

  1. 编译时,编译器优化致使内存乱序访问(指令重排)
  2. 运行时,多 CPU 间交互引发内存乱序访问

Memory barrier 可以让 CPU 或编译器在内存访问上有序。一个 Memory barrier 以前的内存访问操做一定先于其以后的完成。Memory barrier 包括两类:java

  1. 编译器 barrier
  2. CPU Memory barrier
第二:内存泄漏也称做“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果致使一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕以后未回收)即所谓内存泄漏。
内存泄漏形象的比喻是“操做系统可提供给全部进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间愈来愈多,最终用尽所有存储空间,整个系统崩溃。因此“内存泄漏”是从操做系统的角度来看的。这里的存储空间并非指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,若是没有任何一个指针指向它,那么这块内存就泄漏了。

第三:IE中的内存泄漏有好几种,这里有详细的解释(http://msdn.microsoft.com/en-us/library/bb250448.aspx),园子里也有翻译了(http://www.cnblogs.com/birdshome/archive/2006/05/28/ie_memoryleak.html)。node

这里只讨论其中一种,即循环引用所形成的内存泄漏,由于,这是一种最广泛的状况。函数

第四:当在DOM元素或一个ActiveX对象与普通JavaScript对象之间存在循环引用时,IE在释放这类变量时存在特殊的困难,最好手动切断循环引用,这个bug在IE 7中已经被修复了(http://www.quirksmode.org/blog/archives/2006/04/ie_7_and_javasc.html)。性能

“IE 6 suffered from memory leaks when a circular reference between several objects, among which at least one DOM node, was created. This problem has been solved in IE 7. ”优化

相关文章
相关标签/搜索