JavaとC++のメモリ回収メカニズム

1083 ワード

1、C++のメモリ回収メカニズム
newを使用してオブジェクトに空間を割り当てた後、このオブジェクトが使用を終了した後、このメモリ(delete)を人為的に解放しなければなりません.
2、Javaのメモリ回収メカニズム
次のコードのようにします.
	public void funTest(){
		String str = new String("Hello World!");
	}//str       
newでJavaオブジェクトを作成すると、役割ドメインの外で生存できます.したがって、上記のコードでは、str(strはStringオブジェクト「HelloWorld!」の参照)を参照することは、役割ドメインの終点でなくなります.しかし、strが指すStringオブジェクトは、メモリスタック領域を占有し続けます.このコードでは、唯一の参照が役割ドメインの範囲を超えているため、この役割ドメインの後にこのオブジェクトにアクセスできません.(注:このリファレンスを渡すかコピーする必要がある場合)
事実は、newによって作成されたオブジェクトが、必要であれば、ずっと保存されていることを証明しています.これにより、多くのC++プログラミングの問題はJavaで完全に消えてしまいます.C++では、オブジェクトの保持時間が必要なオブジェクトと同じ長さであることを確認するだけでなく、使用後に破棄する必要があります.
しかし、Javaがオブジェクトを存続させると、これらのオブジェクトがメモリ空間を埋め尽くし、プログラムをブロックすることを防止するにはどうすればいいのでしょうか.これはまさにC++で起こり得る問題です.同時にこれもJavaの不思議なところです.Javaはこのように処理されています.
Javaにはnewで作成されたすべてのオブジェクトを監視し、参照されないオブジェクトを識別するゴミ回収器があります.その後、これらのオブジェクトのメモリ領域を解放して、他の新しいオブジェクトで使用できます.つまり、プログラマーたちはメモリの回収の問題を心配する必要はありません.オブジェクトを作成するだけで、不要になるとゴミ回収器で自動的に回収され、メモリが自動的に解放されます.これにより、このようなプログラミングの問題(「メモリ漏洩の問題」)が解消されます.
この解決法はプログラミングの難易度を大幅に簡略化した.