test/compiler/stable/StableConfiguration.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 0
f90c822e73f8
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

     1 /*
     2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 package java.lang.invoke;
    27 import java.lang.reflect.Method;
    28 import java.util.Properties;
    29 import sun.hotspot.WhiteBox;
    31 public class StableConfiguration {
    32     static final WhiteBox WB = WhiteBox.getWhiteBox();
    33     static final boolean isStableEnabled;
    34     static final boolean isServerWithStable;
    36     static {
    37         Boolean value = WB.getBooleanVMFlag("FoldStableValues");
    38         isStableEnabled = (value == null ? false : value);
    39         isServerWithStable = isStableEnabled && get();
    40         System.out.println("@Stable:         " + (isStableEnabled ? "enabled" : "disabled"));
    41         System.out.println("Server Compiler: " + get());
    42     }
    44     // ::get() is among immediately compiled methods.
    45     static boolean get() {
    46         try {
    47             Method m = StableConfiguration.class.getDeclaredMethod("get");
    48             int level = WB.getMethodCompilationLevel(m);
    49             if (level > 0) {
    50               return (level == 4);
    51             } else {
    52               String javaVM = System.getProperty("java.vm.name", "");
    53               if (javaVM.contains("Server")) return true;
    54               if (javaVM.contains("Client")) return false;
    55               throw new Error("Unknown VM type: "+javaVM);
    56             }
    57         } catch (NoSuchMethodException e) {
    58             throw new Error(e);
    59         }
    60     }
    62 }

mercurial