diff --git a/core/src/main/scala/org/apache/spark/util/Utils.scala b/core/src/main/scala/org/apache/spark/util/Utils.scala index 1a5147e483ca..98dd5dc1e16d 100644 --- a/core/src/main/scala/org/apache/spark/util/Utils.scala +++ b/core/src/main/scala/org/apache/spark/util/Utils.scala @@ -3138,7 +3138,19 @@ private[spark] object Utils /** * Return whether we are using G1GC or not */ - lazy val isG1GC: Boolean = { + lazy val isG1GC: Boolean = checkUseGC("UseG1GC") + + /** + * Return whether we are using ZGC or not + */ + lazy val isZGC: Boolean = checkUseGC("UseZGC") + + /** + * Return whether we are using ShenandoahGC or not + */ + lazy val isShenandoahGC: Boolean = checkUseGC("UseShenandoahGC") + + def checkUseGC(useGCObjectStr: String): Boolean = { Try { val clazz = Utils.classForName("com.sun.management.HotSpotDiagnosticMXBean") .asInstanceOf[Class[_ <: PlatformManagedObject]] @@ -3147,9 +3159,9 @@ private[spark] object Utils val vmOptionMethod = clazz.getMethod("getVMOption", classOf[String]) val valueMethod = vmOptionClazz.getMethod("getValue") - val useG1GCObject = vmOptionMethod.invoke(hotSpotDiagnosticMXBean, "UseG1GC") - val useG1GC = valueMethod.invoke(useG1GCObject).asInstanceOf[String] - "true".equals(useG1GC) + val useGCObject = vmOptionMethod.invoke(hotSpotDiagnosticMXBean, useGCObjectStr) + val useGC = valueMethod.invoke(useGCObject).asInstanceOf[String] + "true".equals(useGC) }.getOrElse(false) }