0

同期ブロックに入るのにかかる時間について話しているのではありません。MonitorEnter および MonitorExit ステートメントの実行にかかる時間について話しています。また、C(JNI)でステートメントを実行するのにかかる時間をどのように測定できますか? Eclipse と OSX を使用して Android アプリを開発しています。

4

1 に答える 1

1

競合していないロックを処理する場合、Dalvik の現在のバージョンは、負荷の高いスレッド同期操作を回避する高速パスを使用します。速度に関しては、Java プログラミング言語で記述された短い CPU バウンド メソッドを呼び出すのとほぼ同じです。

ロックが競合している場合 (つまり、2 つ以上のスレッドがロックと対話している場合)、これは非常に重い操作になり、基盤となる OS のスレッド ライブラリへの呼び出しとして VM から底をつきます。とは言うものの、負荷の高いスレッド操作の実行に費やされる時間は、ロックされている実際のアクティビティによって支配されると予想されるのが一般的です (アクティビティが比較的長時間実行されていなければ、競合するロックが発生する可能性はそれほど高くなかったからです)。最初の場所)。

いつものように、プロファイリングはこれをすべて理解するのに役立ちます。

中身をのぞき見したい場合はplatform/dalvik/vm/Sync.cpp>、Android のソースで顕著なコードを見つけることができます。を探してくださいdvmLockObject。ただし、より完全なストーリーを得るには、JIT コンパイラ コードを調べる必要があります。

于 2012-07-30T21:42:45.967 に答える