test/jdk/com/sun/management/OperatingSystemMXBean/GetCommittedVirtualMemorySize.java
changeset 55725 d2188297c6a2
parent 50525 767cdb97f103
equal deleted inserted replaced
55724:3504188512e2 55725:d2188297c6a2
     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.
    55         (com.sun.management.OperatingSystemMXBean)
    55         (com.sun.management.OperatingSystemMXBean)
    56         ManagementFactory.getOperatingSystemMXBean();
    56         ManagementFactory.getOperatingSystemMXBean();
    57 
    57 
    58     // Careful with these values.
    58     // Careful with these values.
    59     private static final long MIN_SIZE_FOR_PASS = 1;
    59     private static final long MIN_SIZE_FOR_PASS = 1;
    60     // Max size for pass dynamically determined below
    60     private static long       MAX_SIZE_FOR_PASS = Long.MAX_VALUE;
    61     private static long       max_size_for_pass = Long.MAX_VALUE;
       
    62 
    61 
    63     private static boolean trace = false;
    62     private static boolean trace = false;
    64 
    63 
    65     public static void main(String args[]) throws Exception {
    64     public static void main(String args[]) throws Exception {
    66         if (args.length > 0 && args[0].equals("trace")) {
    65         if (args.length > 0 && args[0].equals("trace")) {
    67             trace = true;
    66             trace = true;
    68         }
    67         }
    69 
    68 
    70         // 4934082: On Linux, VM size *can* be larger than total swap
       
    71         // size.  Linux might not reserve swap memory immediately when
       
    72         // a page is mmaped.  This means that the reported committed
       
    73         // memory size can grow beyond the swap limit.
       
    74         long max_size = mbean.getTotalSwapSpaceSize() +
       
    75                         mbean.getTotalPhysicalMemorySize();
       
    76 
       
    77         if (max_size > 0) {
       
    78             max_size_for_pass = max_size;
       
    79         }
       
    80         long size = mbean.getCommittedVirtualMemorySize();
    69         long size = mbean.getCommittedVirtualMemorySize();
    81         if (size == -1) {
    70         if (size == -1) {
    82             System.out.println("getCommittedVirtualMemorySize() is not supported");
    71             System.out.println("getCommittedVirtualMemorySize() is not supported");
    83             return;
    72             return;
    84         }
    73         }
    86         if (trace) {
    75         if (trace) {
    87             System.out.println("Committed virtual memory size in bytes: " +
    76             System.out.println("Committed virtual memory size in bytes: " +
    88                                size);
    77                                size);
    89         }
    78         }
    90 
    79 
    91         if (size < MIN_SIZE_FOR_PASS || size > max_size_for_pass) {
    80         if (size < MIN_SIZE_FOR_PASS || size > MAX_SIZE_FOR_PASS) {
    92             throw new RuntimeException("Committed virtual memory size " +
    81             throw new RuntimeException("Committed virtual memory size " +
    93                                        "illegal value: " + size + " bytes " +
    82                                        "illegal value: " + size + " bytes " +
    94                                        "(MIN = " + MIN_SIZE_FOR_PASS + "; " +
    83                                        "(MIN = " + MIN_SIZE_FOR_PASS + "; " +
    95                                        "MAX = " + max_size_for_pass + ")");
    84                                        "MAX = " + MAX_SIZE_FOR_PASS + ")");
    96         }
    85         }
    97 
    86 
    98         System.out.println("Test passed.");
    87         System.out.println("Test passed.");
    99     }
    88     }
   100 }
    89 }