10

Javaでは-Xms256mのように利用可能なメモリを指定できますが、指定しない場合のデフォルトサイズ はどのようになりますでしょうか?

cubick
  • 20,987
  • 5
  • 25
  • 64
Tsuneo Yoshioka
  • 373
  • 1
  • 5
  • 9

2 Answers2

9

Java SE 8のドキュメントを直訳すると以下のようです。

-Xms

  • Java SE 5.0以前:プラットフォームごとの適切なサイズ
  • Java SE 5.0 ~ Java7:物理メモリの1/64より大きい適切なサイズ
  • Java8以降:Old世代とYoung世代に割り当てられたサイズの合計

-Xmx

  • Java SE 5.0以前:64MB
  • Java SE 5.0 ~ Java7:物理メモリの1/4より小さい適切なサイズだが、最大でも1GBまで
  • Java8以降:言及はありませんが、Metaspace領域の特性から考えると可能な限り

Java8ではヒープメモリのPermanent領域が消えて、
代わりにネイティブメモリにMetaspace領域が追加されました。
これに合わせてメモリ関連のオプション・ツールが変更されています。

○公式ドキュメント(一部情報が古いので、解説記事と合わせてご確認ください。)
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html
https://docs.oracle.com/javase/jp/8/technotes/guides/vm/gc-ergonomics.html
http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
http://docs.oracle.com/javase/jp/8/technotes/tools/windows/java.html

○解説記事
http://equj65.net/tech/java8hotspot/
http://www.slideshare.net/YaSuenag/metaspace

Bladean Mericle
  • 937
  • 5
  • 15
7

下みたいに Java コマンドで確認できるみたいです。

% java -XX:+PrintFlagsFinal -version 2>&1 | grep -i heapsize
    uintx ErgoHeapSizeLimit                         = 0               {product}
    uintx HeapSizePerGCThread                       = 87241520        {product}
    uintx InitialHeapSize                          := 134217728       {product}
    uintx LargePageHeapSizeThreshold                = 134217728       {product}
    uintx MaxHeapSize                              := 2147483648      {product}
Daisuke Shimamoto
  • 540
  • 1
  • 5
  • 10
  • Bladean Mericle さんのコメントでは最大で1GBのようですが、上記では2GBになっていますね。。。うーん。。。 – Tsuneo Yoshioka Nov 26 '14 at 09:33