[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12817] Re: 読書会 (Java 言語仕様第3版) 第 9 回議 事録



高橋(徹)です。

メモリが随分と安くなってきたので、自宅PCのメモリを4GB追加しました。
そこで、12月の読書会宿題を早速試してみました。

> 15.10 配列生成式
> --> 確保できる配列の最大サイズは、環境によってどの程度違うのか?
>     --> 64bit の Windows で、搭載メモリ8GB ではどうか?
>     --> 32bit JVM と 64bit JVM ではどうか?
>     --> JVMの最大ヒープサイズの上限が関係するのではないか?
>         --> 2GB か?
>     --> byte[] buf = new byte[Integer.MAX_VALUE]; は成功するか?
>     --> 宿題!!

配列の生成式で指定するサイズはint型なので、上限は 2147483647(約2GB)
です。byte型は1バイトなので単純計算で2GBのヒープを使用するはずです。

以下、Windows Vista 64bit環境で、32bit/64bitのJavaVMを使って確認した
内容です。

・64bit VM (JDK 6 Update4 for Windows x64)
  java -Xmx3500m Test
  で、new byte[Integer.MAX_VALUE] が成功しました。このときJConsoleで
 使用しているヒープサイズを見ると、2,149MBとなっていました。
 -Xmxを指定しないときはJavaVMのデフォルトヒープサイズの上限にかかって
 OutOfMemoryErrorが発生します。

・32bit VM (JDK 6 Update4 for Windows i586)
 java -Xmx3500m Test
  で、以下エラーが発生しJavaVMが起動できませんでした。
 Error occurred during initialization of VM
 Could not reserve enough space for object heap
 Could not create the Java virtual machine.
  -Xmxオプションで指定する最大ヒープサイズを減らして起動確認をしていった
 ところ、1500mで起動エラーは発生しなくなりました。1500mではヒープサイズ
 が不足しOutOfMemoryErrorが発生します。

 Windows上の32bit JavaVMは、ヒープサイズが1.5GBあたりを上限としている
 ようです。Windows(32bit)は確かプロセス空間が2GBなので、そのうちヒープ
 サイズが1.5GBというのは妥当な値と思われます。