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 }
|
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 // The method 'get' below returns true if the method is server compiled
45 // and is used by the Stable tests to determine whether methods in
46 // general are being server compiled or not as the -XX:+FoldStableValues
47 // option is only applicable to -server.
48 //
49 // On aarch64 we DeOptimize when patching. This means that when the
50 // method is compiled as a result of -Xcomp it DeOptimizes immiediately.
51 // The result is that getMethodCompilationLevel returns 0. This means
52 // the method returns true based on java.vm.name.
53 //
54 // However when the tests are run with -XX:+TieredCompilation and
55 // -XX:TieredStopAtLevel=1 this fails because methods will always
56 // be client compiled.
57 //
58 // Solution is to add a simple method 'get1' which should never be
59 // DeOpted and use that to determine the compilation level instead.
60 static void get1() {
61 }
62
63 // ::get() is among immediately compiled methods.
64 static boolean get() {
65 try {
66 get1();
67 Method m = StableConfiguration.class.getDeclaredMethod("get1");
68 int level = WB.getMethodCompilationLevel(m);
69 if (level > 0) {
70 return (level == 4);
71 } else {
72 String javaVM = System.getProperty("java.vm.name", "");
73 if (javaVM.contains("Server")) return true;
74 if (javaVM.contains("Client")) return false;
75 throw new Error("Unknown VM type: "+javaVM);
76 }
77 } catch (NoSuchMethodException e) {
78 throw new Error(e);
79 }
80 }
81
82 }
|