IDEA7はクソ重いんじゃ

m2出たから,ちょっとはマシになっただろうかと思えば,相変わらず重かった。orz
最近のIDEAが重いことに不満を漏らしている人はそこそこいるらしいんだが,TSS.comのコメントにある「だったらVMの設定変えれ」ってのは,あんまりだなーって思った。IDEAは好きだけど,重いもんは重いんだから文句言ったっていいじゃないか。


まー,使ってるマシンスペックのせいってのもあるけどね。実際,会社のPCより家のMacBookのほうが快適に動いてるし(会社のは,もう5年くらい使ってる)。


とは言え,多少なりとも良くなるんだったらと思い,VMの設定をこんな具合に変えてみた。

-Xms256m -Xmx386m
-XX:NewSize=128m -XX:MaxNewSize=256m
-XX:MaxPermSize=96m
-Xincgc

何が悲しくて,こんなことせにゃならんのかと思いつつも,YourKitでモニタリングしながらIDEAを使ってみたら,ヒープの消費量やGCは随分改善されたぞ(それも体感できるほどに,だ)。
#インクリメンタルGCも使ってみるモンだな。


(追記)思うところあって,今はこの設定にしてる。

-Xms386m -Xmx386m
-XX:NewSize=230m -XX:MaxNewSize=230m
-XX:SurvivorRatio=32
-XX:TargetSurvivorRatio=90
-XX:MaxTenuringThreashold=2
-XX:MaxLiveObjectEvacuationRatio=4
-XX:MaxPermSize=96m
-Xincgc

えっと,特色すべき点は,

  • デスクトップアプリにも関わらずヒープサイズを固定してる。:-P
    • ちょっと悩んだんだけど,そこでケチっても仕方ないしなぁ。
    • それと「-XX:NewRatio」が期待通りに設定されないってのも理由のひとつ。
  • New領域をTenured領域より大目に取ってる。
    • 測定してみるとTenuredの消費率って50%程度しかないので,大目に取っておく意味がわからん。
    • 正直,世代別GCってデスクトップアプリじゃ,無駄が多いよなぁと。
  • Suvivor領域はほとんどとってないデス。
    • Eden,Survivorでぱちゃぱちゃやっても埒があかんので,とっととプロモートしなさい。
    • てなわけで,「-XX:MaxTenuringThreshold」も2才。
    • 「-XX:TargetSurvivorRatio」は,もっと小さくてもよかったかな(この辺は,微々たるもんだからどうでもいい)。
    • でもSurvivorを0にする勇気がなかった。

あたりかと。テーマは「いざとなったらFull GCボタンがあるから,いいや」。:-)

Prototype.jsでonloadイベントハンドラを追加する方法

attachEvent()やaddEventListener()はクロスブラウザのこと考えるとメンドイので,こっちが簡単。

Event.observe(window, "load", function() {...});

Prototype.js使わない場合は,こんな感じ。

if (window.addEventListener) {
  window.addEventListener("load", function() {...}, false);
}
else if (window.attachEvent) {
  window.attachEvent("onload", function() {...});
}