IE的JScript解析器可能有Memory Leak

    在家過完了年,感覺精神很爽。明天大家可能都就上班了,新的一年開始了,希望大家新年新氣象。而其我已經發現一點點新年的靈感了哦~,我原來發現IE中的JScript解釋器可能有的Memory Leak的問題,可老是早不到出問題的代碼,今天一下就逮到了一個可以復現的case~~

    想當初我做那個無刷新的JScript TreeView控件時,硬是被折磨壞了。IE進程IEXPLORE.EXE的內存使用量常常串到200M左右,搞得我的JScript代碼運行狂慢,有的時候展開一個Node需要好幾秒鐘@_@。

    復現這個Bug的代碼如下:
<html>
<head>
    
<title>IE Memory Leak Bug</title>
</head>
<body>
<button onclick="GenerateObjects(this)">Append Elements</button>
<div id="container"></div>
    
<script language="Javascript">
function GenerateObjects(elmt)
{
    
var room = document.getElementById('container');
    
for ( var i=0 ; i < 1000 ; ++i )
    
{
         
var obj = new TestObject('__Object__' + i);
         room.appendChild(obj.Render(document));
    }
 
}


function TestObject(name)
{
     
this.m_Name = name;
     
this.m_Description = '';
     
this.m_Element = null;
     
     
this.toString = function()
     
{
         
return '[class TestObject]'; 
     }

}


function TestObject.prototype.Render(doc)
{
     
var span = doc.createElement('SPAN');
    *span.Object 
= this;
    *
this.m_Element = span;
     
     span.Name 
= this.m_Description;
     span.innerText 
= this.m_Name;
     span.style.display 
= 'block';
     
return span;
}

</script>
</body>
</html>

    運行上面的代碼,不斷的點擊"Generate Elements"按鈕,IEXPORE.EXE的內存使用量(PM+VM)持續的上漲。這時不管你點"Refresh"還點"Go"按鈕,IE的內存使用量始終不會減少。除非關掉IE在重新打開,內存才能被釋放。

    問題出在上面示例代碼中打"*"的那兩句話上,只要註釋掉任意一句,Refresh頁面後,IEXPORE.EXE的內存使用量就會降到剛打開IE是那個水平上。

    有興趣歡迎您測試一下這個例子,看看是不是會Memory Leak?

    相關文章:
        ·繼續來研究JScript解析引擎的GC問題 
 
發佈了147 篇原創文章 · 獲贊 0 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章