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 } |