[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というのは妥当な値と思われます。