test/gc/7072527/TestFullGCCount.java

Fri, 02 Dec 2011 15:11:40 -0800

author
jcoomes
date
Fri, 02 Dec 2011 15:11:40 -0800
changeset 3301
aed8bf036ce2
parent 3025
41e6ee74f879
child 5008
bfe3be9ebd6c
permissions
-rw-r--r--

Added tag hs23-b07 for changeset 6de8c9ba5907

     1 /*
     2  * Copyright (c) 2011, 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  */
    24 /*
    25  * @test TestFullGCount.java
    26  * @bug 7072527
    27  * @summary CMS: JMM GC counters overcount in some cases
    28  * @run main/othervm -XX:+UseConcMarkSweepGC TestFullGCCount
    29  *
    30  */
    31 import java.util.*;
    32 import java.lang.management.*;
    34 public class TestFullGCCount {
    36     public String collectorName = "ConcurrentMarkSweep";
    38     public static void main(String [] args) {
    40         TestFullGCCount t = null;
    41         if (args.length==2) {
    42             t = new TestFullGCCount(args[0], args[1]);
    43         } else {
    44             t = new TestFullGCCount();
    45         }
    46         System.out.println("Monitoring collector: " + t.collectorName);
    47         t.run();
    48     }
    50     public TestFullGCCount(String pool, String collector) {
    51         collectorName = collector;
    52     }
    54     public TestFullGCCount() {
    55     }
    57     public void run() {
    58         int count = 0;
    59         int iterations = 20;
    60         long counts[] = new long[iterations];
    61         boolean diffAlways2 = true; // assume we will fail
    63         for (int i=0; i<iterations; i++) {
    64             System.gc();
    65             counts[i] = getCollectionCount();
    66             if (i>0) {
    67                 if (counts[i] - counts[i-1] != 2) {
    68                     diffAlways2 = false;
    69                 }
    70             }
    71         }
    72         if (diffAlways2) {
    73             throw new RuntimeException("FAILED: System.gc must be incrementing count twice.");
    74         }
    75         System.out.println("Passed.");
    76     }
    78     private long getCollectionCount() {
    79         long count = 0;
    80         List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
    81         List<GarbageCollectorMXBean> collectors = ManagementFactory.getGarbageCollectorMXBeans();
    82         for (int i=0; i<collectors.size(); i++) {
    83             GarbageCollectorMXBean collector = collectors.get(i);
    84             String name = collector.getName();
    85             if (name.contains(collectorName)) {
    86                 System.out.println(name + ": collection count = "
    87                                    + collector.getCollectionCount());
    88                 count = collector.getCollectionCount();
    89             }
    90         }
    91         return count;
    92     }
    94 }

mercurial