ある側面で大量のデータ収集コードを同期する必要があることに気づきましたが、パフォーマンスが非常に重要です。パフォーマンスが大幅に低下すると、ツールが破棄されます。intとlongを個別に、さまざまな配列、ArrayLists、Mapsに書き込みます。私の側面で取り上げられる関数呼び出しを行うアプリケーションの複数のスレッドがあります。パフォーマンスに悪影響を与えるので、どのようなことに注意する必要がありますか?どのコードパターンがより効率的ですか?
特に、他の多くのデータ記録メソッドを呼び出すメソッドがあります。
void foo() {
bar();
woz();
...
}
メソッドは主にアスペクトフィールドの増分を追加します
void bar() {
f++; // f is a field of the aspect
for (int i = 0; i < ary.length; i++) {
// get some values from aspect point cut
if (some condiction) {
ary[i] += someValue; // ary a field of the aspect
}
}
}
foo、またはbar、wozなどを個別に同期する必要がありますか、それともbar、wozなどのすべてのコードをfooに移動して、同期する必要がありますか?this
特別に作成された同期オブジェクトで、で同期する必要があります。
private final Object syncObject = new Object();
(この投稿を参照)、またはメソッド内の個々のデータ要素について:
ArrayList<Integer> a = new ArrayList<Integer>();
void bar() {
synchronize(a) {
// synchronized code
}
}