/*
* @(#)MethodCall.java 1.7 06/10/10
*
* Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*
*/
import java.lang.reflect.Method;
import sun.misc.JIT;
class C1 {
boolean printTrace = false;
void xxx() {
if (printTrace) {
new Exception("backtrace").printStackTrace();
}
}
int zoo(int x) {
if ((x & 0xff) == 0xff) {
xxx();
}
return x + 3;
}
int goo(int x) {
return zoo(x + 2);
}
int foo(int x) {
return goo(x + 1);
}
}
public class MethodCall {
private static void testMethod(C1 c, int i) {
c.foo(i);
}
public static void main(String args[]) throws NoSuchMethodException {
C1 c = new C1();
int iterations = Integer.parseInt(args[0]);
long t1 = System.currentTimeMillis();
for (int i = 0; i < iterations; ++i) {
}
long t2 = System.currentTimeMillis();
long nullTime = t2 - t1;
t2 = System.currentTimeMillis();
for (int i = 0; i < iterations; ++i) {
testMethod(c, i);
}
long t3 = System.currentTimeMillis();
t3 = System.currentTimeMillis();
Class[] args0 = new Class[] { Integer.TYPE};
Method m0 = C1.class.getDeclaredMethod("goo", args0);
sun.misc.JIT.compileMethod(m0, true);
long t4 = System.currentTimeMillis();
for (int i = 0; i < iterations; ++i) {
testMethod(c, i);
}
long t5 = System.currentTimeMillis();
t5 = System.currentTimeMillis();
Class[] args1 = new Class[] { Integer.TYPE};
Method m1 = C1.class.getDeclaredMethod("zoo", args1);
sun.misc.JIT.compileMethod(m1, true);
long t6 = System.currentTimeMillis();
for (int i = 0; i < iterations; ++i) {
testMethod(c, i);
}
long t7 = System.currentTimeMillis();
c.printTrace = true;
for (int i = 0; i < iterations; ++i) {
testMethod(c, i);
}
System.out.println("null loop " + iterations + " iterations in " +
nullTime + "ms");
System.out.println("goo interpreted " + iterations + " iterations in " +
(t3 - t2 - nullTime) + "ms");
System.out.println("goo compiled " + iterations + " iterations in " +
(t5 - t4 - nullTime) + "ms");
System.out.println("goo,zoo compiled " + iterations +
" iterations in " + (t7 - t6 - nullTime) + "ms");
}
}