アーロノートの質問への回答に応じて:
静的メソッドに使用されるメモリは少なくありませんか?各オブジェクトインスタンスは、非静的メンバー関数の独自の実行可能バージョンを持ち歩いているように見えます。
OOの設計が不十分であっても、静的メソッドの呼び出しにどのくらいのオーバーヘッドが関係していても、将来の頭痛の種であっても、実行時に使用するメモリが少なくないのではないでしょうか。
次に例を示します。
ゼロで初期化されたオブジェクトのベクトルを作成します。各オブジェクトには、1つのデータ(9つのdoubleで構成される三角形)が含まれています。各オブジェクトは、.stlファイルから読み取られたデータから順に読み込まれます。必要な静的メソッドは1つだけです。適切なOO設計では、データを直接処理するメソッドを各オブジェクトに配布する必要があります。標準のOOソリューションは次のとおりです。
foreach(obj in vec) {
obj.readFromFile(fileName);
}
各objはreadFromFile
、データとともにのコンパイル済みコードを保持します!
この場合、パフォーマンスよりもメモリの方が問題であり、制約されたシステムには大量のデータがあります。
ソリューション:
- 名前空間メソッド(C ++には最適ですが、Javaでは不可能)
- objのクラスの1つの静的メソッド。実行可能コードは、実行時に1か所に保持されます。メソッドを呼び出すための小さなオーバーヘッドがあります。
- objの派生元の親クラス
readFromFile
。プライベートメソッドが含まれます。コールとsuper.callPrivateMethod()
その呼び出しreadFromFile
。乱雑ですが、各オブジェクトのメモリオーバーヘッドが多少あります。 readFromFile
objのスコープ外に実装するため、vecのクラスまたは呼び出し元のクラスに実装します。私の意見では、これはデータのカプセル化を壊します。
大量のデータの場合、三角形ごとに1つの明示的なオブジェクトを使用するのは最善の方法ではないことに気づきました。これは単なる例です。