JavaがOutOfMemoryError
をスローし、-XX:+HeapDumpOnOutOfMemoryError
を使用してヒープダンプを取得するまで、データ構造にアイテムを意図的に追加しています。私は-Xmx100M
を使用していますので、ヒープダンプで約100MBのライブオブジェクトが表示されると予想しましたが、代わりに46MBしか表示されません。Javaヒープ・ダンプがヒープの半分しか表示しないのはなぜですか?
ライブオブジェクトが46MBしかない場合、Javaはなぜ100MBのヒープでOOMをスローしますか?
(私はこの質問に答えるために十分な情報を与えられていないが、私は、関連するだかわからないんだけど良いチャンスがあるの実現、必要に応じてより多くの情報を追加することが幸せ。。)
EDIT:最後の-verbose:gc
出力:
[Full GC (Ergonomics) [PSYoungGen: 1056K->64K(2560K)] [ParOldGen: 7116K->7116K(7168K)] 8173K->7180K(9728K), [Metaspace: 5981K->5981K(1056768K)], 0.0071141 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[Full GC (Allocation Failure) [PSYoungGen: 64K->0K(2560K)] [ParOldGen: 7116K->7075K(7168K)] 7180K->7075K(9728K), [Metaspace: 5981K->5974K(1056768K)], 0.0190392 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
java.lang.OutOfMemoryError: Java heap space
見ることができます。実際のエラーは何ですか? –
こんにちはPeter。これは次のとおりです: 'スレッド内の例外" main "java.lang.OutOfMemoryError:Javaヒープスペース \t at java.util.Arrays.copyOf(Arrays.java:3308)' – Doradus
大きな配列を生成できない場合は、その配列のないダンプ・ダンプ。最近、100 MBは小さなヒープですが、あなたはそれが小さいことが必要ですか? –