jsynprog
实验是一个简单应用程序,专用于说明执行各种测试所要花费的时间量,例如向量/数组操作、递归、整数/双精度加法、内存分配、系统调用以及对使用 JNI 的本机代码的调用。实验由下列几个单独的源文件组成:
jsynprog.java
:主入口点,包含所需的 public static void main(String[] args) method
。
Intface.java
:一个简单界面,用于定义累加数字的两种方法: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
:分配两个大型数组,然后对其执行复制操作。
Routine.vector_op
:分配大型向量,然后执行操作以向其中添加或从中删除元素。
Routine.sys_op
:使用 java.lang.System.currentTimeMillis()
,花费一些时间用于系统调用
jsynprog.jni_JavaJavaC
:说明 JNI 的使用:一个 Java 方法调用另一个调用 C 函数的 Java 方法。
jsynprog.JavaCC
:说明 JNI 的使用:Java 方法调用 C 函数,被调用的 C 函数调用另一个 C 函数。
jsynprog.JavaCJava
:说明 JNI 的使用:Java 方法调用 C 函数,被调用的 C 函数调用一个 Java 方法。