// Make $noinline$testInvokeVirtual and $noinline$testInvokeInterface hot to get them jitted. // We pass Main and Subclass to get polymorphic inlining based on calling // the same method. for (int i = 0; i < 0x30000; ++i) {
$noinline$testInvokeVirtual(mains[0]);
$noinline$testInvokeVirtual(mains[1]);
$noinline$testInvokeInterface(itfs[0]);
$noinline$testInvokeInterface(itfs[1]);
$noinline$testInvokeInterface2(itfs[0]);
$noinline$testInvokeInterface2(itfs[1]);
$noinline$testInlineToSameTarget(mains[0]);
$noinline$testInlineToSameTarget(mains[1]);
}
// At this point, the JIT should have compiled both methods, and inline // sameInvokeVirtual and sameInvokeInterface.
assertEquals(Main.class, $noinline$testInvokeVirtual(mains[0]));
assertEquals(Main.class, $noinline$testInvokeVirtual(mains[1]));
// This will trigger a deoptimization of the compiled code.
assertEquals(OtherSubclass.class, $noinline$testInvokeVirtual(mains[2]));
assertEquals(OtherSubclass.class, $noinline$testInvokeInterface(itfs[2]));
assertEquals(null, $noinline$testInvokeInterface2(itfs[2]));
// Run this once to make sure we execute the JITted code.
$noinline$testInlineToSameTarget(mains[0]);
assertEquals(0x60000 + 1, counter);
}
publicClass<?> sameInvokeVirtual() {
field.getClass(); // null check to ensure we get an inlined frame in the CodeInfo. return Main.class;
}
publicClass<?> sameInvokeInterface() {
field.getClass(); // null check to ensure we get an inlined frame in the CodeInfo. return Itf.class;
}
publicClass<?> sameInvokeInterface2() {
field.getClass(); // null check to ensure we get an inlined frame in the CodeInfo. return Itf.class;
}
publicClass<?> sameInvokeInterface3() {
field.getClass(); // null check to ensure we get an inlined frame in the CodeInfo. return Itf.class;
}
publicstaticClass<?> $noinline$testInvokeInterface2(Itf i) { // Make three interface calls that will do a ClassTableGet to ensure bogus code // generation of ClassTableGet will crash.
i.sameInvokeInterface();
i.sameInvokeInterface2(); return i.sameInvokeInterface3();
}
publicstaticClass<?> $noinline$testInvokeVirtual(Main m) { return m.sameInvokeVirtual();
}
publicstaticvoid $noinline$testInlineToSameTarget(Main m) {
m.increment();
}
public Object field = new Object();
publicstaticvoid ensureJittedAndPolymorphicInline(String methodName) { if (!ensureJittedAndPolymorphicInline566(methodName)) { thrownew Error("Didn't find an inlined method in " + methodName);
}
}
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.