Windows XP上での最大のheapサイズ設定

発端
結局Windows XP上でEclipseに設定できるjava heapの最大サイズが知りたい

結論
安定版:-xmx1024m
事実最大:-xmx1100m〜-xmx1200m

経緯
いまや普通に64bitOSが基本選択できるPC環境ではあるけど、それは個人レベルの話であり、企業は未だにWindows XPを使っている現場が多数ある。
ただ、ここ最近はCPUの値段はあんまり変わってないのに、(代わりに同じ値段で高性能なやつが買える)メモリーやストレージはかなり価格が下がっている。
まあ、そこにはいろんな理由があり、まずはCPUそのものがin○elという会社1社でほぼ独占状況になっている(A○Dもあるのはあるけど)のに対して、メモリーやストレージは複数の会社が乱立しており、競争になるのがひとつ。
あと、CPUは上がれば上がるほどいいが、メモリーやストレージはある程度以上はあまっているだけで、これ以上はいらなくなるからである。
(32bit OSの限界によりメモリーは4gbまで、ストレージも状況によっては異なるが、、市販される製品のいわば相場というものより遥かに低い容量で十分であろう)
だから、けちけちな社長が務まる会社であってもメモリーはある程度余裕があるので、それをできる限り活用したくなるのも人間の心理ではある。

ということでけっこうな試行錯誤も覚悟で調べたが、以外とあっさり情報が出た。

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html


簡単まとめ

-xms数字m, -xmx数字mの意味
Set the maximum Java heap size, using the -Xmx command-line option, to a value that allows the application to run with 70% occupancy of the Java heap.

ここで指定するjava heapの最大サイズは、このアプリケーションから使えるjava heapの最大サイズから70%までを占有するとの意味。
つまり、最大に使えるjava heapから70%までの数値しか指定ができない。

逆に-xmsは最低限で使えるメモリーから40%を占有する意味。

たとえば、-xms128m -xmx512mにすると、実際は320m〜732mの範囲でjavaモリーアルゴリズムが最適化してくれる。(つまり、この範囲が使えるheapである。。)

heapの種類
いわばヒープで呼ばれるものはjava heapとnative heapがある。
上記のオプションはjava heapの話。

プロセスのheapサイズ。

フラットフォーム(いわばOS)により、ひとつのプロセスに割り当てられる最大のheapサイズは予め決まっており、それ以上は当てられない。
あと、当てられたheapサイズとは上記の(java heap + native heap)である。
つまり、java heapに当てすぎて、native heapが少ない場合は内部からout of memoryになるので、起動できない。(その逆もあり。)

windows xp(32bit)での最大値
上記のサイトの表にもあるけど、1.8Gが最大。

まず、eclipseのnative heapはざっくり100mぐらい
(もっと少ないはずでもあるけど、wtp, subclipse,limyなど実用的なフラグインを設定してからタスクマネージャで(使用メモリ - java heap)をすると、大体70〜80ぐらいなので、ここでは100mと想定)

(1.8G - 0.1G) * 0.7 = 1.19G

ただし、実際に-xmx1190mにすると起動できる場合とできない場合がある。
(おそらく、その時のOSのメモリーの状況による)
だから、安定にしたい場合は-xmx1024mぐらいでとまったほうがいいかと、、

余談

利便性などはともかく、OSレベルではwindowsはプログラムに向いてないのかと、、
32bitでもlinuxは(カーネルによるけど)3gまでは当てられる。

まあ、とりあえず、調べたのでメモっとく。