hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java
author tschatzl
Wed, 11 Sep 2013 16:25:02 +0200
changeset 19986 33d188c66ed9
parent 19554 3f21e829c7de
child 21554 20b1821f4fbd
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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     1
/*
16697
1863b690d34f 8012048: JDK8 b85 source with GPL header errors
katleman
parents: 16601
diff changeset
     2
 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     4
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     7
 * published by the Free Software Foundation.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     8
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    13
 * accompanied this code).
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    14
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    18
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    21
 * questions.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    22
 *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    23
 */
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    24
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    25
package sun.hotspot;
15621
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
    26
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
    27
import java.lang.reflect.Executable;
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    28
import java.security.BasicPermission;
12262
fb3b9fede660 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 12095
diff changeset
    29
import sun.hotspot.parser.DiagnosticCommand;
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    30
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    31
public class WhiteBox {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    32
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    33
  @SuppressWarnings("serial")
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    34
  public static class WhiteBoxPermission extends BasicPermission {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    35
    public WhiteBoxPermission(String s) {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    36
      super(s);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    37
    }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    38
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    39
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    40
  private WhiteBox() {}
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    41
  private static final WhiteBox instance = new WhiteBox();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    42
  private static native void registerNatives();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    43
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    44
  /**
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    45
   * Returns the singleton WhiteBox instance.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    46
   *
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    47
   * The returned WhiteBox object should be carefully guarded
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    48
   * by the caller, since it can be used to read and write data
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    49
   * at arbitrary memory addresses. It must never be passed to
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    50
   * untrusted code.
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    51
   */
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    52
  public synchronized static WhiteBox getWhiteBox() {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    53
    SecurityManager sm = System.getSecurityManager();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    54
    if (sm != null) {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    55
      sm.checkPermission(new WhiteBoxPermission("getInstance"));
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    56
    }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    57
    return instance;
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    58
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    59
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    60
  static {
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    61
    registerNatives();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    62
  }
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    63
19986
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19554
diff changeset
    64
  // Get the maximum heap size supporting COOPs
33d188c66ed9 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 19554
diff changeset
    65
  public native long getCompressedOopsMaxHeapSize();
17322
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    66
  // Arguments
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    67
  public native void printHeapSizes();
35c488005999 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 17083
diff changeset
    68
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    69
  // Memory
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    70
  public native long getObjectAddress(Object o);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    71
  public native int  getHeapOopSize();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    72
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    73
  // Runtime
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    74
  // Make sure class name is in the correct format
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    75
  public boolean isClassAlive(String name) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    76
    return isClassAlive0(name.replace('.', '/'));
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    77
  }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    78
  private native boolean isClassAlive0(String name);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12262
diff changeset
    79
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    80
  // G1
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    81
  public native boolean g1InConcurrentMark();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    82
  public native boolean g1IsHumongous(Object o);
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    83
  public native long    g1NumFreeRegions();
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
    84
  public native int     g1RegionSize();
12262
fb3b9fede660 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 12095
diff changeset
    85
  public native Object[]    parseCommandLine(String commandline, DiagnosticCommand[] args);
15452
3bfde2dea09d 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 13728
diff changeset
    86
3bfde2dea09d 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 13728
diff changeset
    87
  // NMT
16666
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    88
  public native long NMTMalloc(long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    89
  public native void NMTFree(long mem);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    90
  public native long NMTReserveMemory(long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    91
  public native void NMTCommitMemory(long addr, long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    92
  public native void NMTUncommitMemory(long addr, long size);
da191c7e38d2 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 16601
diff changeset
    93
  public native void NMTReleaseMemory(long addr, long size);
15452
3bfde2dea09d 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 13728
diff changeset
    94
  public native boolean NMTWaitForDataMerge();
19554
3f21e829c7de 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 19332
diff changeset
    95
  public native boolean NMTIsDetailSupported();
15621
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
    96
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
    97
  // Compiler
b094c56bba84 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 15452
diff changeset
    98
  public native void    deoptimizeAll();
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
    99
  public        boolean isMethodCompiled(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   100
    return isMethodCompiled(method, false /*not osr*/);
16689
efce070b8d42 8007288: Additional WB API for compiler's testing
iignatyev
parents: 16601
diff changeset
   101
  }
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   102
  public native boolean isMethodCompiled(Executable method, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   103
  public        boolean isMethodCompilable(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   104
    return isMethodCompilable(method, -1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   105
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   106
  public        boolean isMethodCompilable(Executable method, int compLevel) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   107
    return isMethodCompilable(method, compLevel, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   108
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   109
  public native boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   110
  public native boolean isMethodQueuedForCompilation(Executable method);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   111
  public        int     deoptimizeMethod(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   112
    return deoptimizeMethod(method, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   113
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   114
  public native int     deoptimizeMethod(Executable method, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   115
  public        void    makeMethodNotCompilable(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   116
    makeMethodNotCompilable(method, -1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   117
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   118
  public        void    makeMethodNotCompilable(Executable method, int compLevel) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   119
    makeMethodNotCompilable(method, compLevel, false /*not osr*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   120
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   121
  public native void    makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   122
  public        int     getMethodCompilationLevel(Executable method) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   123
    return getMethodCompilationLevel(method, false /*not ost*/);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   124
  }
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   125
  public native int     getMethodCompilationLevel(Executable method, boolean isOsr);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   126
  public native boolean testSetDontInlineMethod(Executable method, boolean value);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   127
  public        int     getCompileQueuesSize() {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   128
    return getCompileQueueSize(-1 /*any*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   129
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   130
  public native int     getCompileQueueSize(int compLevel);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   131
  public native boolean testSetForceInlineMethod(Executable method, boolean value);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   132
  public boolean        enqueueMethodForCompilation(Executable method, int compLevel) {
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   133
    return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/);
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   134
  }
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   135
  public native boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci);
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   136
  public native void    clearMethodState(Executable method);
19332
ee4c8c2af356 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 17824
diff changeset
   137
  public native int     getMethodEntryBci(Executable method);
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   138
17015
92390f57e8b1 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 16694
diff changeset
   139
  // Intered strings
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   140
  public native boolean isInStringTable(String str);
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   141
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents: 17019
diff changeset
   142
  // Memory
17824
24dc83d7c1d7 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 17322
diff changeset
   143
  public native void readReservedMemory();
17083
14000894ef39 8012015: Use PROT_NONE when reserving memory
mikael
parents: 17019
diff changeset
   144
16601
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   145
  // force Full GC
7c6db0c8952f 8009763: Add WB test for String.intern()
mgerdin
parents: 15793
diff changeset
   146
  public native void fullGC();
12095
cc3d6f08a4c4 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
   147
}