高洛峰2017-04-18 10:51:43
メモリ オーバーフローには 2 つの状況があります。1 つは無限再帰の呼び出しなどのスタック オーバーフローです。ヒープ オーバーフローもあります。つまり、new から出てくるオブジェクトはすぐには破棄されず、常に new になります。
大家讲道理2017-04-18 10:51:43
一般的に言えば、Java におけるメモリ リークとは、プログラムで不要になった割り当てられたメモリを再利用できないという事実を指します。
ガベージ コレクション メカニズムは、オブジェクトとルート オブジェクトの到達可能性によってメモリをリサイクルできるかどうかを決定します。ただし、プログラミング エラーやその他の理由により、期限切れのオブジェクト参照が依然として保持されており、ガベージ コレクターは関連する領域を再利用できません。
伊谢尔伦2017-04-18 10:51:43
マンホールを占拠してうんちをしなければ、彼にできることは何もありません。
私の同僚が書いたブログを読むことをお勧めします: http://blog.csdn.net/zhanggan...
PHPz2017-04-18 10:51:43
今のところ、人が作ったものは人そのものを超えることはできません。Java の GC アルゴリズムは人によって書かれていますが、命をかけて GC で再利用できないコードを書く人もいるでしょう。
PHPz2017-04-18 10:51:43
私自身の理解なので、間違っていたらご指摘ください。
JDK6 では、String のメソッドは subString と呼ばれ、部分文字列を生成するために使用されます。生成を高速化するために、String にはコンストラクター
String(int offset, int count, char value[]) {
}
は元の String 配列を直接指します。定数プール内の新しい String 文字列が毎回生成されることは誰もが知っています。ただし、この参照により、元の文字列はリサイクルされなくなります。 subString の値が彼を指すためです。これによりメモリリークが発生します。
JVM は、プログラマからの干渉をあまり受けずに単独で GC を実行しますが、一部の誤った操作により、使用する必要のなくなった一部のオブジェクトが参照を保持しており、メモリ リークが発生します。