src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java

Print this page




  31 import java.lang.reflect.Method;
  32 import java.lang.reflect.Modifier;
  33 import java.util.Collections;
  34 import java.util.HashMap;
  35 import java.util.Map;
  36 import java.util.Objects;
  37 import java.util.TreeMap;
  38 
  39 import jdk.vm.ci.code.Architecture;
  40 import jdk.vm.ci.code.CompilationResult;
  41 import jdk.vm.ci.code.InstalledCode;
  42 import jdk.vm.ci.common.JVMCIError;
  43 import jdk.vm.ci.inittimer.InitTimer;
  44 import jdk.vm.ci.meta.JVMCIMetaAccessContext;
  45 import jdk.vm.ci.meta.JavaKind;
  46 import jdk.vm.ci.meta.JavaType;
  47 import jdk.vm.ci.meta.ResolvedJavaType;
  48 import jdk.vm.ci.runtime.JVMCI;
  49 import jdk.vm.ci.runtime.JVMCIBackend;
  50 import jdk.vm.ci.runtime.JVMCICompiler;
  51 import jdk.vm.ci.service.Services;
  52 import sun.misc.VM;
  53 
  54 //JaCoCo Exclude
  55 
  56 /**
  57  * HotSpot implementation of a JVMCI runtime.
  58  *
  59  * The initialization of this class is very fragile since it's initialized both through
  60  * {@link JVMCI#initialize()} or through calling {@link HotSpotJVMCIRuntime#runtime()} and
  61  * {@link HotSpotJVMCIRuntime#runtime()} is also called by {@link JVMCI#initialize()}. So this class
  62  * can't have a static initializer and any required initialization must be done as part of
  63  * {@link #runtime()}. This allows the initialization to funnel back through
  64  * {@link JVMCI#initialize()} without deadlocking.
  65  */
  66 public final class HotSpotJVMCIRuntime implements HotSpotJVMCIRuntimeProvider, HotSpotProxified {
  67 
  68     @SuppressWarnings("try")
  69     static class DelayedInit {
  70         private static final HotSpotJVMCIRuntime instance;
  71 




  31 import java.lang.reflect.Method;
  32 import java.lang.reflect.Modifier;
  33 import java.util.Collections;
  34 import java.util.HashMap;
  35 import java.util.Map;
  36 import java.util.Objects;
  37 import java.util.TreeMap;
  38 
  39 import jdk.vm.ci.code.Architecture;
  40 import jdk.vm.ci.code.CompilationResult;
  41 import jdk.vm.ci.code.InstalledCode;
  42 import jdk.vm.ci.common.JVMCIError;
  43 import jdk.vm.ci.inittimer.InitTimer;
  44 import jdk.vm.ci.meta.JVMCIMetaAccessContext;
  45 import jdk.vm.ci.meta.JavaKind;
  46 import jdk.vm.ci.meta.JavaType;
  47 import jdk.vm.ci.meta.ResolvedJavaType;
  48 import jdk.vm.ci.runtime.JVMCI;
  49 import jdk.vm.ci.runtime.JVMCIBackend;
  50 import jdk.vm.ci.runtime.JVMCICompiler;
  51 import jdk.vm.ci.services.Services;
  52 import sun.misc.VM;
  53 
  54 //JaCoCo Exclude
  55 
  56 /**
  57  * HotSpot implementation of a JVMCI runtime.
  58  *
  59  * The initialization of this class is very fragile since it's initialized both through
  60  * {@link JVMCI#initialize()} or through calling {@link HotSpotJVMCIRuntime#runtime()} and
  61  * {@link HotSpotJVMCIRuntime#runtime()} is also called by {@link JVMCI#initialize()}. So this class
  62  * can't have a static initializer and any required initialization must be done as part of
  63  * {@link #runtime()}. This allows the initialization to funnel back through
  64  * {@link JVMCI#initialize()} without deadlocking.
  65  */
  66 public final class HotSpotJVMCIRuntime implements HotSpotJVMCIRuntimeProvider, HotSpotProxified {
  67 
  68     @SuppressWarnings("try")
  69     static class DelayedInit {
  70         private static final HotSpotJVMCIRuntime instance;
  71