test/jdk/sun/management/HotspotRuntimeMBean/GetTotalSafepointTime.java
changeset 57611 c0023e364b6f
parent 47216 71c04702a3d5
equal deleted inserted replaced
57610:eafa7a1e8d9b 57611:c0023e364b6f
     1 /*
     1 /*
     2  * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     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
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    38 public class GetTotalSafepointTime {
    38 public class GetTotalSafepointTime {
    39 
    39 
    40     private static HotspotRuntimeMBean mbean =
    40     private static HotspotRuntimeMBean mbean =
    41         (HotspotRuntimeMBean)ManagementFactoryHelper.getHotspotRuntimeMBean();
    41         (HotspotRuntimeMBean)ManagementFactoryHelper.getHotspotRuntimeMBean();
    42 
    42 
    43     private static final long NUM_THREAD_DUMPS = 100;
       
    44 
       
    45     // Careful with these values.
    43     // Careful with these values.
    46     private static final long MIN_VALUE_FOR_PASS = 1;
    44     private static final long MIN_VALUE_FOR_PASS = 1;
    47     private static final long MAX_VALUE_FOR_PASS = Long.MAX_VALUE;
       
    48 
    45 
    49     private static boolean trace = false;
    46     // Thread.getAllStackTraces() should cause safepoints.
       
    47     // If this test is failing because it doesn't,
       
    48     // MIN_VALUE_FOR_PASS should be reset to 0
       
    49     public static long executeThreadDumps(long initial_value) {
       
    50         long value;
       
    51         do {
       
    52             Thread.getAllStackTraces();
       
    53             value = mbean.getTotalSafepointTime();
       
    54         } while (value == initial_value);
       
    55         return value;
       
    56     }
    50 
    57 
    51     public static void main(String args[]) throws Exception {
    58     public static void main(String args[]) throws Exception {
    52         if (args.length > 0 && args[0].equals("trace")) {
    59         long value = executeThreadDumps(0);
    53             trace = true;
    60         System.out.println("Total safepoint time (ms): " + value);
       
    61 
       
    62         if (value < MIN_VALUE_FOR_PASS) {
       
    63             throw new RuntimeException("Total safepoint time " +
       
    64                                        "illegal value: " + value + " ms " +
       
    65                                        "(MIN = " + MIN_VALUE_FOR_PASS + ")");
    54         }
    66         }
    55 
    67 
    56         // Thread.getAllStackTraces() should cause safepoints.
    68         long value2 = executeThreadDumps(value);
    57         // If this test is failing because it doesn't,
    69         System.out.println("Total safepoint time (ms): " + value2);
    58         // MIN_VALUE_FOR_PASS should be reset to 0
       
    59         for (int i = 0; i < NUM_THREAD_DUMPS; i++) {
       
    60              Thread.getAllStackTraces();
       
    61         }
       
    62 
       
    63         long value = mbean.getTotalSafepointTime();
       
    64 
       
    65         if (trace) {
       
    66             System.out.println("Total safepoint time (ms): " + value);
       
    67         }
       
    68 
       
    69         if (value < MIN_VALUE_FOR_PASS || value > MAX_VALUE_FOR_PASS) {
       
    70             throw new RuntimeException("Total safepoint time " +
       
    71                                        "illegal value: " + value + " ms " +
       
    72                                        "(MIN = " + MIN_VALUE_FOR_PASS + "; " +
       
    73                                        "MAX = " + MAX_VALUE_FOR_PASS + ")");
       
    74         }
       
    75 
       
    76         for (int i = 0; i < 2 * NUM_THREAD_DUMPS; i++) {
       
    77              Thread.getAllStackTraces();
       
    78         }
       
    79         long value2 = mbean.getTotalSafepointTime();
       
    80 
       
    81         if (trace) {
       
    82             System.out.println("Total safepoint time2 (ms): " + value2);
       
    83         }
       
    84 
    70 
    85         if (value2 <= value) {
    71         if (value2 <= value) {
    86             throw new RuntimeException("Total safepoint time " +
    72             throw new RuntimeException("Total safepoint time " +
    87                                        "did not increase " +
    73                                        "did not increase " +
    88                                        "(value = " + value + "; " +
    74                                        "(value = " + value + "; " +