サルでも分かるデザインパターンの記事を公開しました。
以前、WEB+DB PRESSで書かせて頂いたデザインパターンの記事をHTML化して公開しました。デザインパターンには結城さんのデザパタ本という素晴らしい書籍がありますので、それとはかぶらないようになるべく現場寄りの視点で書いています。
「HTML版サルでも分かるデザインパターン」
http://www.nulab.co.jp/designPatterns/designPatterns1/designPatterns1-1.html
PDFで欲しい方は、「WEB+DB PRESS特別総集編」をご購入下さい。
http://www.gihyo.co.jp/magazines/wdpress/archive/sp
ソースコード一式は、「WEB+DB PRESS Vol.22 補足情報」から。
http://www.gihyo.co.jp/magazines/wdpress/support/Vol22
スペシャルサンクス、dotさん、hayashiさん。
WindowsXPでの最大ヒープメモリの制限
起動オプションに「-Xmx」を使って最大ヒープメモリの設定ができますが、
1.2Gあたりを越えると、以下のエラーが発生します。
Error occurred during initialization of VM Could not reserve enough space for object heap
で、いろいろぐぐって出てきたのが次のBlog。
http://jroller.com/page/rreyelts/20040914
Windows XP, Windows 2000 Advanced Server, and Windows 2003 Server all have special support for enabling 3G address spaces for your programs. You simply set the "/3GB" switch in your boot.ini file.
WindowsXPだと3Gアドレス空間をサポートするために、boot.iniを編集する必要があるみたいなことが書いてあります。
始めて知ったんですけど、このあたりって常識なんでしょうか!?
Windows XP および Windows Server 2003 の Boot.ini ファイルで使用可能なスイッチ オプション
http://support.microsoft.com/kb/833721/ja/
/3GB
このスイッチにより、x86-based システムで、3 GB の仮想アドレス領域がプログラムに、1 GB の仮想アドレス領域がカーネルと Executive コンポーネントに割り当てられます。プログラムは、追加のメモリアドレス領域を活用できるように設計されている必要があります。このスイッチを使用すると、ユーザー モード プログラムは、Windows が通常ユーザー モード プログラムに割り当てる 2GB ではなく、3GB のメモリにアクセスすることができます。このスイッチによりカーネルメモリの開始位置は 3GB に移動します。Microsoft Exchange Server 2003 および Microsoft Windows Server 2003 の一部の構成では、このスイッチが必須になる場合があります。
/3GがJavaVMの最大ヒープと関係あるのかどうかわからん・・・
実際にセットして試してみます。
WindowsXPでの最大ヒープメモリの制限その2
http://support.microsoft.com/kb/833721/ja/
元のBlogの続きを読むと、SunのVMでは1.3Gの壁を越えられないって感じのことが書いてあるような気が・・・
WindowsXPでの最大ヒープメモリの制限その3
http://www5.airnet.ne.jp/sakuraba/java/diary/200403.html#20040320
これは非常に明確ですが、もう 1 つの方はやっかいです。
第 1 のリミットを通過した後に、実際にメモリアロケーションを行っているのですが、これを行っているのが Windows の場合は Win32 API の VirtualAlloc、Unix の場合は mmap で仮想メモリからアロケーションを行います。これらのメソッドでアロケーションができなかった場合に Error occurred during initialization of VM というエラーメッセージが出力されるのです。どこまでアロケーションできるかはメモリや OS に依存してしまうので、いちがいにここまでということができないのが悩ましいところです。私のメモリが 512 MB の Windows XP のマシンでは 1444m まで指定することができました。
環境に依存する見たいですね。
うちの768Mのマシンでは1.2Gぐらいまで指定できました。
追伸:解決しました。
Windowsの仮想メモリをカスタムにして最大を2000M程度割り当てると、
「-Dmx1500m」で起動できました。
どうやら、3Gの制限はひっかかってはいなかったようです。