All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kilim.bench.Ex_vs_Ret Maven / Gradle / Ivy

Go to download

Coroutines, continuations, fibers, actors and message passing for the JVM

There is a newer version: 2.0.2-jdk7
Show newest version
/* 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.
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy