changeset 10768:a6fc98719c47

8059455: LambdaForm.prepare() does unnecessary work for cached LambdaForms Reviewed-by: psandoz
author vlivanov
date Thu, 23 Apr 2015 18:01:38 +0300
parents 24578c3975f7
children edcc8fb4c0e3
files src/share/classes/java/lang/invoke/LambdaForm.java
diffstat 1 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/LambdaForm.java	Tue Apr 21 21:06:06 2015 +0300
+++ b/src/share/classes/java/lang/invoke/LambdaForm.java	Thu Apr 23 18:01:38 2015 +0300
@@ -631,7 +631,7 @@
      * as a sort of pre-invocation linkage step.)
      */
     public void prepare() {
-        if (COMPILE_THRESHOLD == 0) {
+        if (COMPILE_THRESHOLD == 0 && !isCompiled) {
             compileToBytecode();
         }
         if (this.vmentry != null) {
@@ -645,11 +645,11 @@
 
     /** Generate optimizable bytecode for this form. */
     MemberName compileToBytecode() {
-        MethodType invokerType = methodType();
-        assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));
         if (vmentry != null && isCompiled) {
             return vmentry;  // already compiled somehow
         }
+        MethodType invokerType = methodType();
+        assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));
         try {
             vmentry = InvokerBytecodeGenerator.generateCustomizedCode(this, invokerType);
             if (TRACE_INTERPRETER)