トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Rhino:jQueryでメモリリーク? の変更点

Top / Rhino:jQueryでメモリリーク?

[[Java:jerichoを使ってHTMLをパースする]]

*Rhino:jQueryでメモリリーク? [#ied7e8b6]

Rhino+envjs+jQueryで、jQueryオブジェクトをバンバン作ると、OutOfMemoryが発生する事象に遭遇。

スレッドダンプとってみると、こんな感じでした。

  num     #instances         #bytes  class name
 ----------------------------------------------
    1:       3813197      152527880  org.mozilla.javascript.ScriptableObject$Slot
    2:        332180       36329664  [Lorg.mozilla.javascript.ScriptableObject$Slot;
    3:        651485       26059400  org.mozilla.javascript.ScriptableObject$RelinkedSlot
    4:        313764       15060672  org.mozilla.javascript.NativeObject
    5:        134345       13340688  [C
    6:         14186        7705328  [Ljava.lang.Object;
 ・・・以下省略

このタイミングでは、150MBとくらい消費していて、時間が経つにつれてたん純増する感じでした。そして、このまま使用量は増加の一途たどり、最終的にはOutOfMemoryでお亡くなりに、、、w

※スレッドダンプのとり方はこちら→[[Java:スレッドダンプをとる]]

実行したJSはこんな感じ。

 function getContentsHtmlText(url){
 	var res = $.ajax({
 		url: url,
 		async : false,
 		error : function(xhr,status,error){
 			print("error: status=" + xhr.status + status + error);
 		}
 	});
 	return res.responseText;
 }
 
 function scrapeBodyText(contentHtml){
 	return $(contentHtml).find('#body').text();
 
getContesHtmlText関数は繰り返し実行しても問題なかったけど、scrapeBodyText関数をJava経由で繰り返し実行すると、先のスレッドダンプの状況になります。

jQueryバンバン使いたくてRhino使ってみたんだけど、これじゃあなー、、、