私はラッパーのコストが非常に高価なものとして表示されるスレッドエグゼキュータの実装をしています。ここでJavaメソッドの呼び出しにはコストがかかるのはなぜですか?
class Task {
public Runnable r;
public Task(Runnable r) {
this.r = r;
}
public void run() {
r.run();
}
List<task> taskList;
以下の場合、実行時間は〜800msです。次のように定義されているラッパークラスTaskがあります。
for (Task t : taskList) {
t.r.run();
}
以下のケースでは〜7000msですが、
for (Task t : taskList) {
t.run();
}
孤立して起こるのではなく、実行プログラムのコード内で起きています。誰かが何が起こっているかもしれないかについてのヒントがあるのかどうか疑問に思うだけですか?
ランナブルが渡され、このテストケースについては、以下である:参考
class Tester implements Runnable {
int i;
public Tester(int i) {
this.i = i;
}
@Override
public void run() {
//System.out.println(i);
for (int j = 0; j < 1000000; j++) {
i = j;
}
}
public int getI() {
return i;
}
、コードがgithub.com/sharvanath/TempThreadPoolに見出すことができます。実行結果を取得するためにThreadPoolTestを実行します。 ThreadPool.javaの41行目を変更して、その魔法を見てみましょう。
「実行する」とは何ですか?それはノーオペレーションですか? – 5gon12eder
ここに投稿したコードには(ほとんどゼロ)違いがあります。他のコードには何かがあるはずです。 –
コード全体を共有するべきではありません。問題を示す*最小限の例を含める必要があります。 –