kilim.bench.Ex_vs_Ret Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kilim Show documentation
Show all versions of kilim Show documentation
Coroutines, continuations, fibers, actors and message passing for the JVM
/* Copyright (c) 2006, Sriram Srinivasan
*
* You may distribute this software under the terms of the license
* specified in the file "License"
*/
package kilim.bench;
public class Ex_vs_Ret {
/**
* @param args
*/
public static void main(String[] args) {
final int ntimes = 1000000;
final int depth = 10;
// JIT Warmup ===========================================
for (int i = 0; i < 1000; i++) ret(depth);
for (int i = 0; i < 1000; i++) {
try {
ex(depth);
} catch (FastEx ignore) {}
}
long start = System.currentTimeMillis();
for (int i = 0; i < ntimes; i++) {
ret(depth);
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("Iterations = : " +ntimes + ", stack depth = " + depth);
System.out.println("ret ms: " + elapsed);
start = System.currentTimeMillis();
for (int i = 0; i < ntimes; i++) {
try {
ex(depth);
} catch (FastEx fe) {}
}
elapsed = System.currentTimeMillis() - start;
System.out.println("ex : " + elapsed);
}
static void ret(int depth) {
if (depth != 0) {
ret(depth-1);
}
}
static void ex(int depth) throws FastEx {
if (depth == 0) {
throw new FastEx();
}
ex(depth-1);
}
}
final class FastEx extends Throwable {
private static final long serialVersionUID = 1L; // Just suppressing warnings.
@Override
public synchronized Throwable fillInStackTrace() {
return null; // The most time consuming part of throwing an exception.
}
}