jsynprog 実験は、ベクトル / 配列操作、再帰、整数 / 倍精度の加算、メモリー割り当て、システムコール、JNI を使用したネイティブコードの呼び出しといったさまざまなテストの実行にかかる時間を実証するためのシンプルなアプリケーションです。 この実験は、次に示す個々のソースファイルから構成されます。
jsynprog.java: 必要な public static void main(String[] args) method を含むメインエントリポイント Intface.java: 数を加算する 2 つのメソッド public int add_int() と public double add_double() を定義するシンプルなインタフェース
Routine.java: Intface のメソッドを実装するとともに、ガベージコレクション、内部クラス、再帰、間接的な再帰、配列処理、ベクトル処理、システムコールなどをテストする付加的なメソッドを定義します。 Sub_Routine.java: add_int() メソッドを無効にする Routine のサブクラス jsynprog.h: cloop.cc で使用されるヘッダファイル cloop.cc: jsynprog によって呼び出されるネイティブメソッドの C++ コード jsynprog.main で実験を開始し終了するまでの制御フロー。 main にいる間、プログラムはほかのクラスのメソッド (Routine.memalloc や Sub_Routine.add_double など) を呼び出すことによって、次に示す個々のテストをこの順に実施します。
Routine.memalloc: 大きなメモリー割り当てを設定することによって、JVM 内でガベージコレクションを開始する Routine.add_int: 入れ子になったループを使用して整数の加算を繰り返す Routine.add_double: 入れ子になったループを使用して倍精度の加算を繰り返す Sub_Routine.add_int: 異なる動作を起こすために add_int テストを無効にする Routine.has_inner_class: メソッドにローカルな内部クラスを定義して使用する Routine.recurse: 直接再帰の使用を実例で示す。このメソッドはそれ自体を何度も呼び出します。 Routine.bounce: 間接再帰の使用を実例で示す。このメソッドは、ほかのメソッドを呼び出します (呼び出されたメソッドは反対にこのメソッドを呼び出す)。 Routine.array_op: 大きな配列を 2 つ割り当て、続いてそれらに対してコピー処理を行う Routine.vector_op: 大きなベクトルを割り当て、続いてそのベクトルに対して要素の追加 / 削除操作を行う Routine.sys_op: java.lang.System.currentTimeMillis() を使用し、システム呼び出しにいくらか時間を充てるSystem.currentTimeMillis() jsynprog.jni_JavaJavaC: JNI の使用を実例で示す。 Java メソッドがほかの Java メソッドを呼び出し、呼び出された Java メソッドが C 関数を呼び出します。 jsynprog.JavaCC: JNI の使用を実例で示す。 Java メソッドが C 関数を呼び出し、呼び出された C 関数が別の C 関数を呼び出します。 jsynprog.JavaCJava: JNI の使用を実例で示す。 Java メソッドが C 関数を呼び出し、呼び出された C 関数が Java メソッドを呼び出します。