/* * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code 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 code 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 in the LICENSE file that * accompanied this code). * * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
CallSite ccs = new MyCCS(MCS.type(), handler); // trigger call to handler
if (ccs != holder[0]) { thrownew AssertionError("different call site instances");
} for (int i = 0; i < 20_000; i++) {
test(false); // should not throw
}
}
privatestaticvoid testMutableCallSite() throws Throwable { // warm-up for (int i = 0; i < 20000; i++) {
mcs.setTarget(mh_foo);
} // run for (int n = 0; n < 2; n++) {
mcs.setTarget(mh_foo); for (int i = 0; i < 5; i++) {
assertEQ(RESULT1, runMutableCallSite());
}
mcs.setTarget(mh_bar); for (int i = 0; i < 5; i++) {
assertEQ(RESULT2, runMutableCallSite());
}
}
} privatestaticvoid testVolatileCallSite() throws Throwable { // warm-up for (int i = 0; i < 20000; i++) {
vcs.setTarget(mh_foo);
} // run for (int n = 0; n < 2; n++) {
vcs.setTarget(mh_foo); for (int i = 0; i < 5; i++) {
assertEQ(RESULT1, runVolatileCallSite());
}
vcs.setTarget(mh_bar); for (int i = 0; i < 5; i++) {
assertEQ(RESULT2, runVolatileCallSite());
}
}
}
privatestaticint runMutableCallSite() throws Throwable { int sum = 0; for (int i = 0; i < N; i++) {
sum += (int) INDY_mcs().invokeExact(i, i+1);
} return sum;
} privatestaticint runVolatileCallSite() throws Throwable { int sum = 0; for (int i = 0; i < N; i++) {
sum += (int) INDY_vcs().invokeExact(i, i+1);
} return sum;
}
staticint foo(int a, int b) { return a + b; } staticint bar(int a, int b) { return a - b; }
privatestaticvoid shouldNotCallThis() { // if this gets called, the transformation has not taken place thrownew AssertionError("this code should be statically transformed away by Indify");
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.