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; 26 27 import java.lang.reflect.Method; 28 import java.util.Properties; 29 import sun.hotspot.WhiteBox; 30 31 public class StableConfiguration { 32 static final WhiteBox WB = WhiteBox.getWhiteBox(); 33 static final boolean isStableEnabled; 34 static final boolean isServerWithStable; 35 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 } 43 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 } 61 62 }