2012-03-30 14 views
1

与えられたRunnableオブジェクト。ランタイムの決定論的実行

public class Test implements Runnable { 

    @Override 
    public void run() { 

     int x = 2; 
     int y = 6; 
     // Snip more code 
     int w = x - 1; 
     int z = x * y;   

    } 

} 

Iは、操作の正確な数を実行できるようにしたいのですが、例えば

Test t = new Test(); 
Executor.execute(t, 100); // Arbitrary unit of operations 

ように私はこの実行を行う初めてまでに実行されている場合:

int w = x - 1; 

私は同じポイントまで実行されてしまいます同じパラメータを持つメソッドを呼び出す任意の他の時間を。

私は周りを見ていて、何か適切なものが見えません(例えば、ScheduledThreadPoolExecutorは私の言う限りでは動作しません)。

このコードを作成するには、バイトコードレベルに移行する必要がありますか?私が読んだことから、JITはここでも問題を引き起こすかもしれません。

+0

操作ではどういう意味ですか?あなたはJavaの呼び出しを意味しますか?バイトコード演算子?プロセッサのオペレーション? – ControlAltDel

答えて

1

操作ごとにタイムアウトをチェックできるようにバイトコードを挿入できます。これにより、100倍以上の速度が得られる可能性がありますが、それは決定論的です。

もっと実用的な方法は、ランニングテーブルにコードを追加することで、あなたのchosingの試行でタイムアウトをチェックすることです。

+0

私は、コードカバレッジツールの働きに似ていると思います。私はこれを試して、パフォーマンスにどのような影響があるかを見なければなりません。 – Karle

2

あなたはそのようなコマンドオブジェクトであなたの操作をラップできます。

public interface Operation {  
    int executeOp(int prevResult); 
} 

実行可能なこれらのオブジェクトのリストを保持し、唯一の言う彼らの最初の100を呼び出します。

関連する問題