diff -r f3cf7fd26baa jdk/src/java.management/share/classes/module-info.java
--- a/jdk/src/java.management/share/classes/module-info.java	Thu Jun 22 18:42:46 2017 +0000
+++ b/jdk/src/java.management/share/classes/module-info.java	Fri Jun 23 14:16:07 2017 +0200
@@ -64,7 +64,8 @@
     exports sun.management.counter.perf to
         jdk.management.agent;
     exports sun.management.spi to
-        jdk.management;
+        jdk.management,
+        jdk.internal.vm.ci;
 
     uses javax.management.remote.JMXConnectorProvider;
     uses javax.management.remote.JMXConnectorServerProvider;
diff -r 76a497562014 hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerFactory.java
--- a/hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerFactory.java	Thu Jun 22 18:42:45 2017 +0000
+++ b/hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerFactory.java	Fri Jun 23 14:16:07 2017 +0200
@@ -91,4 +91,12 @@
     public CompilationLevel adjustCompilationLevel(Class<?> declaringClass, String name, String signature, boolean isOsr, CompilationLevel level) {
         throw new InternalError("Should not reach here");
     }
+
+    public String mbeanName() {
+        return null;
+    }
+
+    public Object mbean() {
+        return null;
+    }
 }
diff -r 76a497562014 hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java
--- a/hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Thu Jun 22 18:42:45 2017 +0000
+++ b/hotspot/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Fri Jun 23 14:16:07 2017 +0200
@@ -548,6 +548,14 @@
         };
     }
 
+    public String mbeanName() {
+        return hsCompilerFactory == null ? null : hsCompilerFactory.mbeanName();
+    }
+
+    public Object mbean() {
+        return hsCompilerFactory == null ? null : hsCompilerFactory.mbean();
+    }
+
     /**
      * Collects the current values of all JVMCI benchmark counters, summed up over all threads.
      */
diff -r 76a497562014 hotspot/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/src/jdk/vm/ci/services/internal/JVMCIMXBeans.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/src/jdk/vm/ci/services/internal/JVMCIMXBeans.java	Fri Jun 23 14:16:07 2017 +0200
@@ -0,0 +1,51 @@
+package jdk.vm.ci.services.internal;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
+import sun.management.spi.PlatformMBeanProvider;
+
+public final class JVMCIMXBeans extends PlatformMBeanProvider {
+    @Override
+    public List<PlatformComponent<?>> getPlatformComponentList() {
+        // somehow obtain the bean from JVMCI compiler
+        HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime.runtime();
+        if (runtime.mbeanName() != null) {
+            return Collections.singletonList(new HotSpotRuntimeMBeanComponent(runtime));
+        }
+        return Collections.emptyList();
+    }
+
+    private static final class HotSpotRuntimeMBeanComponent implements PlatformComponent<Object> {
+        private final HotSpotJVMCIRuntime runtime;
+
+        HotSpotRuntimeMBeanComponent(HotSpotJVMCIRuntime runtime) {
+            this.runtime = runtime;
+        }
+
+        @Override
+        public Set<Class<?>> mbeanInterfaces() {
+            return Collections.singleton(runtime.mbean().getClass());
+        }
+
+        @Override
+        public Set<String> mbeanInterfaceNames() {
+            return Collections.singleton(runtime.mbeanName());
+        }
+
+        @Override
+        public String getObjectNamePattern() {
+            return runtime.mbeanName();
+        }
+
+        @Override
+        public Map<String, Object> nameToMBeanMap() {
+            return Collections.<String, Object>singletonMap(
+                runtime.mbeanName(),
+                runtime.mbean());
+        }
+
+    }
+}
diff -r 76a497562014 hotspot/src/jdk.internal.vm.ci/share/classes/module-info.java
--- a/hotspot/src/jdk.internal.vm.ci/share/classes/module-info.java	Thu Jun 22 18:42:45 2017 +0000
+++ b/hotspot/src/jdk.internal.vm.ci/share/classes/module-info.java	Fri Jun 23 14:16:07 2017 +0200
@@ -26,6 +26,8 @@
 module jdk.internal.vm.ci {
     exports jdk.vm.ci.services to jdk.internal.vm.compiler;
 
+    requires java.management;
+
     uses jdk.vm.ci.services.JVMCIServiceLocator;
     uses jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory;
 
@@ -33,4 +35,6 @@
         jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory,
         jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory,
         jdk.vm.ci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory;
+    provides sun.management.spi.PlatformMBeanProvider
+        with jdk.vm.ci.services.internal.JVMCIMXBeans;
 }
