0

これは C と Java の両方に当てはまります。両方を求めています。

1秒間におそらく数百回実行される更新ループがあります。

私の懸念は、主にメモリ管理と何が起こるかです。

ここに例がありますので

public methodA(double Delta)
{
    double doubleTest = Delta;
    SomeObject newObject = new Object(Delta);
}

SomeObject newObject = new Object();
double doubleTest;
public methodB(double Delta)
{
    doubleTest = Delta;
    newObject.setUpdate(Delta);
}

メソッドAはパフォーマンスを犠牲にしてGCされていることをJAVAで知っていますが、CまたはC ++では正確に何が起こりますか? メソッド スコープ内で宣言された変数またはオブジェクトは破棄されますか? もしそうなら、どのループが良いですか?(2 番目のループでメモリ不足になるのでしょうか?)

また、メソッド更新用のオブジェクトを事前に作成する価値はありますか? もしあれば、パフォーマンスの向上は何ですか?

4

3 に答える 3

1

1. - 変数が破棄されます。

2. - 第 2 に、パラメータを渡す場合、メソッド スコープの外にある必要はありません。

3. - 文章の観点からは、すべてを 1 行にまとめた方が効率的です。メモリ フットプリントは、もしあれば、2 つの間で非常に最小限です。

于 2013-08-13T04:31:30.930 に答える
0
  1. メソッドはガベージ コレクションされません。

  2. あなたのコードにはループが見られないので、あなたが何を求めているのか混乱しています。

  3. あなたの2つの方法は非常に異なることを行うため、それらを比較することは困難です。まず第一に、最近のコンパイラ (Java、C、および C++) は非常にスマートです。Object のコンストラクターに副作用がない限り、合理的なコンパイラーは、methodA何もしないため、おそらくすべての呼び出しを最適化します。

    methodBとはまったく異なることmethodAを行うので、なぜ2つを比較しているのかわかりません。methodB呼び出しnewObject.setUpdate()は、副作用があると仮定して、コンパイラによって削除されません。もちろん、newObject他の場所で実際に使用したことがない場合でも、コンパイラはそれが不要であると判断し、 へのすべての呼び出しを最適化する可能性がありますmethodB

いずれにせよ、あなたが具体的に何を比較しようとしているのかわからないので、あなたの質問は私を混乱させます.

于 2013-08-13T04:31:39.363 に答える
0

メソッドAはパフォーマンスを犠牲にしてGCされていることをJAVAで知っていますが、CまたはC ++では正確に何が起こりますか? メソッド スコープ内で宣言された変数またはオブジェクトは破棄されますか? もしそうなら、どのループが良いですか?(2 番目のループでメモリ不足になるのでしょうか?)

メソッドがガベージ コレクションされるという概念はなく、参照のみがガベージ コレクションされます。ローカル変数のスコープは、Java と C++ の両方で定義されているメソッド/関数に限定されます。ただし、C++ には例外があります。malloc/calloc を使用して動的データ構造を作成している場合、明示的に解放しない限り、その変数のメモリは解放されません。C++ にはガベージ コレクターがないため、動的なメモリ割り当てに注意し、そのメモリを解放する必要があります。この責任は C++ では開発者にありますが、Java では JVM ガベージ コレクターが処理します。

于 2013-08-13T04:31:53.283 に答える