test/testlibrary/whitebox/sun/hotspot/WhiteBox.java

Wed, 11 Sep 2013 16:25:02 +0200

author
tschatzl
date
Wed, 11 Sep 2013 16:25:02 +0200
changeset 5701
40136aa2cdb1
parent 5586
5fd8e2fbafd4
child 6078
9d8b29a0548c
permissions
-rw-r--r--

8010722: assert: failed: heap size is too big for compressed oops
Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation.
Reviewed-by: stefank, dholmes

     1 /*
     2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 package sun.hotspot;
    27 import java.lang.reflect.Executable;
    28 import java.security.BasicPermission;
    29 import sun.hotspot.parser.DiagnosticCommand;
    31 public class WhiteBox {
    33   @SuppressWarnings("serial")
    34   public static class WhiteBoxPermission extends BasicPermission {
    35     public WhiteBoxPermission(String s) {
    36       super(s);
    37     }
    38   }
    40   private WhiteBox() {}
    41   private static final WhiteBox instance = new WhiteBox();
    42   private static native void registerNatives();
    44   /**
    45    * Returns the singleton WhiteBox instance.
    46    *
    47    * The returned WhiteBox object should be carefully guarded
    48    * by the caller, since it can be used to read and write data
    49    * at arbitrary memory addresses. It must never be passed to
    50    * untrusted code.
    51    */
    52   public synchronized static WhiteBox getWhiteBox() {
    53     SecurityManager sm = System.getSecurityManager();
    54     if (sm != null) {
    55       sm.checkPermission(new WhiteBoxPermission("getInstance"));
    56     }
    57     return instance;
    58   }
    60   static {
    61     registerNatives();
    62   }
    64   // Get the maximum heap size supporting COOPs
    65   public native long getCompressedOopsMaxHeapSize();
    66   // Arguments
    67   public native void printHeapSizes();
    69   // Memory
    70   public native long getObjectAddress(Object o);
    71   public native int  getHeapOopSize();
    73   // Runtime
    74   // Make sure class name is in the correct format
    75   public boolean isClassAlive(String name) {
    76     return isClassAlive0(name.replace('.', '/'));
    77   }
    78   private native boolean isClassAlive0(String name);
    80   // G1
    81   public native boolean g1InConcurrentMark();
    82   public native boolean g1IsHumongous(Object o);
    83   public native long    g1NumFreeRegions();
    84   public native int     g1RegionSize();
    85   public native Object[]    parseCommandLine(String commandline, DiagnosticCommand[] args);
    87   // NMT
    88   public native long NMTMalloc(long size);
    89   public native void NMTFree(long mem);
    90   public native long NMTReserveMemory(long size);
    91   public native void NMTCommitMemory(long addr, long size);
    92   public native void NMTUncommitMemory(long addr, long size);
    93   public native void NMTReleaseMemory(long addr, long size);
    94   public native boolean NMTWaitForDataMerge();
    95   public native boolean NMTIsDetailSupported();
    97   // Compiler
    98   public native void    deoptimizeAll();
    99   public        boolean isMethodCompiled(Executable method) {
   100     return isMethodCompiled(method, false /*not osr*/);
   101   }
   102   public native boolean isMethodCompiled(Executable method, boolean isOsr);
   103   public        boolean isMethodCompilable(Executable method) {
   104     return isMethodCompilable(method, -1 /*any*/);
   105   }
   106   public        boolean isMethodCompilable(Executable method, int compLevel) {
   107     return isMethodCompilable(method, compLevel, false /*not osr*/);
   108   }
   109   public native boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr);
   110   public native boolean isMethodQueuedForCompilation(Executable method);
   111   public        int     deoptimizeMethod(Executable method) {
   112     return deoptimizeMethod(method, false /*not osr*/);
   113   }
   114   public native int     deoptimizeMethod(Executable method, boolean isOsr);
   115   public        void    makeMethodNotCompilable(Executable method) {
   116     makeMethodNotCompilable(method, -1 /*any*/);
   117   }
   118   public        void    makeMethodNotCompilable(Executable method, int compLevel) {
   119     makeMethodNotCompilable(method, compLevel, false /*not osr*/);
   120   }
   121   public native void    makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr);
   122   public        int     getMethodCompilationLevel(Executable method) {
   123     return getMethodCompilationLevel(method, false /*not ost*/);
   124   }
   125   public native int     getMethodCompilationLevel(Executable method, boolean isOsr);
   126   public native boolean testSetDontInlineMethod(Executable method, boolean value);
   127   public        int     getCompileQueuesSize() {
   128     return getCompileQueueSize(-1 /*any*/);
   129   }
   130   public native int     getCompileQueueSize(int compLevel);
   131   public native boolean testSetForceInlineMethod(Executable method, boolean value);
   132   public boolean        enqueueMethodForCompilation(Executable method, int compLevel) {
   133     return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/);
   134   }
   135   public native boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci);
   136   public native void    clearMethodState(Executable method);
   137   public native int     getMethodEntryBci(Executable method);
   139   // Intered strings
   140   public native boolean isInStringTable(String str);
   142   // Memory
   143   public native void readReservedMemory();
   145   // force Full GC
   146   public native void fullGC();
   147 }

mercurial