2017-05-11 1 views
4

catchブロック内に何かを記録するには、StringオブジェクトであるがJVMにはすでにメモリが不足しているテキストが必要です。考えられる2つの理由は次のとおりです。JavaでOutOfMemoryエラーをログに記録できるのはなぜですか?

  1. OutOfMemoryエラーは、ヒープスペースとStringオブジェクトがStringプールに保存できることを示します。
  2. OutOfMemoryエラーは、ヒープが完全にいっぱいであり、ロギングする文字列を格納するために使用できるスペースが非常に少ないのに対して、スペースが非常に少ないことを示します。
+0

表面のこれらの奇妙な質問の1つ。興味深い食べ物を思考に与えてくれます。 – GhostCat

+0

あなたの*質問*とまったく同じではありませんが、多くの答えがあなたが探している洞察力の種類を提供します。 – Michael

+0

@Michaelここに良い点がある! – GhostCat

答えて

3

非常に幅広い質問ですが、単純な答えの1つです.JVMを実装すると、100%メモリが使い果たされるまで待つことはおそらくありません。

意味:制限の99.99%にあるときは、「緊急ブレーク」を単に引くことができます。それで、(何らかの形で)調整された「緊急停止」を可能にするために必要な「小さな」準備金を持っていることがわかっているからです。

それ以外の場合:これは、例外に指定されたメッセージ文字列の「less」となる可能性があります.JVMはスタックトレース情報も収集します。それを例外/エラーに結びつけます。 (imho)はです。高価で、いくつかのメッセージ文字列のための部屋を作る!

+0

はい私は第2の理由で同じ考えを共有しました。これが実際の理由であることを確かめるためにどこかに書かれているのだろうかと思います。 – Sandeep

+0

私は近い理由として言及された質問はそこにいくつかの洞察力を持っているかもしれないと思います。いずれにしても、これは実際に実装固有のものになります。それを処理するさまざまな方法があるためです。 – GhostCat

+0

@GhostCatあなたはそれが実装に依存していると思います。あなたは幸運かもしれないし、OOMEを問題なくログすることができるかもしれないし、そうでないかもしれない。 OVMの場合に実行可能な実行ファイルを指定できるJVMオプション 'OnOutOfMemoryError'があります。その存在は、私には、これを処理する最も信頼性の高い方法は、他のプログラムに従うことであることが示唆されています。 – Michael

関連する問題