/bench/kilim/bench/Ex_vs_Ret.java
http://github.com/kilim/kilim · Java · 65 lines · 46 code · 10 blank · 9 comment · 8 complexity · b9f34f2f1450047e996476ad81e85813 MD5 · raw file
- /* 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.
- }
- }