サルでも分かるデザインパターンの記事を公開しました。

以前、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での最大ヒープメモリの制限その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の制限はひっかかってはいなかったようです。