オブジェクト指向プログラミングにおけるインスタンスの仕組みについて整理しています。
インスタンスを作る命令(newなど)を実行すると、そのクラスのインスタンス変数を格納するために必要な大きさのメモリがヒープ領域に割り当てられる。
この時、インスタンスを指定してメソッドを呼び出す仕組み実現するため、インスタンスからメソッドエリアにあるクラス情報への対応づけも行う。(クラス情報が保存されたメモリ領域のこと)
オブジェクト指向プログラミングでは、従来のプログラミング言語と比較してインスタンスの作り方に特徴がある。
従来のプログラミング言語
- ヒープ領域は、割り当て処理のオーバーヘッドがかかる上に、使い終わった後にメモリの解放を忘れてしまうことでメモリリーク問題も起こりやすい
- コードとグローバル変数を静的領域に配置し、サブルーチン呼び出しの情報はスタック領域を使って受け渡すことが多かった
オブジェクト指向プログラミング
- 有限のメモリ領域であるヒープ領域を大量に使って動く
- 最近はハードウェア能力も向上したため、ヒープ領域にメモリを確保したり解放したりすることによるオーバーヘッドは全体から見れば非常に小さくなった
- またガベージコレクションの仕組みにより、メモリの解放忘れによるメモリリーク問題もほとんど気にする必要がなくなった
メモリ容量が大きくなったとはいえ、一時期に膨大な数のインスタンスを作ると、CPUに大きな負荷がかかり、ひどい時にはメモリ領域不足でシステム障害になることもあり得る。
大量の情報をまとめて読み込んで処理をするアプリケーションのプログラムを書く場合、その処理によってヒープ領域をどれだけ使うのかをあらかじめ見積もって対応する必要がある。