Prosessiajan mittaaminen Javalla

Jotta Javalla voisi mitata prosessiaikaa, tarvitaan siihen järjestelmätasoisen clock() -funktion kutsumista. Käytämme siis JNI:tä. Tässä lyhyt esimerkki, miten natiivifunktioita voi kutsua Javalla. Lataa seuraavat kolme tiedostoa ja noudata alla olevia ohjeita:
JNIClockExample.java:

/**
  * Using native clock() for process time measurement using JNI
  *
  * (c) 2003 Juha Tukkinen 
  */
public class JNIClockExample {
  public static void main(String[] args) {
  
    JavaNativeClock jnc = new JavaNativeClock();

    int begin = jnc.clock();
    int b = 5;
    for(int i = 0; i < 100000000; i++) {
      b *= i % 32000;
    }
    int end = jnc.clock();
    System.out.println(end-begin);
    }
}

JavaNativeClock.java:
class JavaNativeClock {
  public native int clock();
  static {
    System.loadLibrary("javanativeclock"); 
  }
}
JavaNativeClock.cpp:
#include "JavaNativeClock.h"
#include <jni.h>
#include <time.h>

JNIEXPORT jint JNICALL Java_JavaNativeClock_clock(JNIEnv *, jobject) {
    return clock();
}

Vaihe vaiheelta ohjeet:

  1. javac JNIClockExample.java
  2. javah -jni JavaNativeClock
  3. gcc -shared -I/usr/java/j2sdk1.4.0_01/include -I/usr/java/j2sdk1.4.0_01/include/linux JavaNativeClock.cpp -o libjavanativeclock.so
  4. LD_LIBRARY_PATH=. java JNIClockExample
Juha Tukkinen jtukkine@cs.hut.fi 19.3.2003