31 */
32 public enum GC {
33 /*
34 * Enum values must match CollectedHeap::Name
35 */
36 Serial(1),
37 Parallel(2),
38 G1(3),
39 Epsilon(4),
40 Z(5),
41 Shenandoah(6);
42
43 private static final WhiteBox WB = WhiteBox.getWhiteBox();
44
45 private final int name;
46
47 private GC(int name) {
48 this.name = name;
49 }
50
51 private boolean supportsOSVersion() {
52 if (this != Z) {
53 return true;
54 }
55
56 String osName = System.getProperty("os.name");
57
58 if (!osName.startsWith("Windows")) {
59 return true;
60 }
61
62 // ZGC has specific Windows version requirements (>= 1803).
63 // The following check should be made more precise to
64 // also catch the corresponding Windows 10 version.
65 return osName.equals("Windows Server 2019");
66 }
67
68 /**
69 * @return true if this GC is supported by the VM, i.e., it is built into the VM.
70 */
71 public boolean isSupported() {
72 return WB.isGCSupported(name) && supportsOSVersion();
73 }
74
75 /**
76 * @return true if this GC is currently selected/used
77 */
78 public boolean isSelected() {
79 return WB.isGCSelected(name);
80 }
81
82 /**
83 * @return true if GC was selected ergonomically, as opposed
84 * to being explicitly specified on the command line
85 */
86 public static boolean isSelectedErgonomically() {
87 return WB.isGCSelectedErgonomically();
88 }
89
90 /**
91 * @return the selected GC.
92 */
|
31 */
32 public enum GC {
33 /*
34 * Enum values must match CollectedHeap::Name
35 */
36 Serial(1),
37 Parallel(2),
38 G1(3),
39 Epsilon(4),
40 Z(5),
41 Shenandoah(6);
42
43 private static final WhiteBox WB = WhiteBox.getWhiteBox();
44
45 private final int name;
46
47 private GC(int name) {
48 this.name = name;
49 }
50
51 /**
52 * @return true if this GC is supported by the VM, i.e., it is built into the VM.
53 */
54 public boolean isSupported() {
55 return WB.isGCSupported(name);
56 }
57
58 /**
59 * @return true if this GC is currently selected/used
60 */
61 public boolean isSelected() {
62 return WB.isGCSelected(name);
63 }
64
65 /**
66 * @return true if GC was selected ergonomically, as opposed
67 * to being explicitly specified on the command line
68 */
69 public static boolean isSelectedErgonomically() {
70 return WB.isGCSelectedErgonomically();
71 }
72
73 /**
74 * @return the selected GC.
75 */
|