src/share/vm/gc_implementation/g1/g1HRPrinter.cpp

Mon, 24 Mar 2014 15:30:14 +0100

author
tschatzl
date
Mon, 24 Mar 2014 15:30:14 +0100
changeset 6402
191174b49bec
parent 2975
5f6f2615433a
child 6680
78bbf4d43a14
permissions
-rw-r--r--

8035406: Improve data structure for Code Cache remembered sets
Summary: Change the code cache remembered sets data structure from a GrowableArray to a chunked list of nmethods. This makes the data structure more amenable to parallelization, and decreases freeing time.
Reviewed-by: mgerdin, brutisso

     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  *
    23  */
    25 #include "precompiled.hpp"
    26 #include "gc_implementation/g1/g1HRPrinter.hpp"
    27 #include "gc_implementation/g1/heapRegion.hpp"
    28 #include "utilities/ostream.hpp"
    30 const char* G1HRPrinter::action_name(ActionType action) {
    31   switch(action) {
    32     case Alloc:          return "ALLOC";
    33     case AllocForce:     return "ALLOC-FORCE";
    34     case Retire:         return "RETIRE";
    35     case Reuse:          return "REUSE";
    36     case CSet:           return "CSET";
    37     case EvacFailure:    return "EVAC-FAILURE";
    38     case Cleanup:        return "CLEANUP";
    39     case PostCompaction: return "POST-COMPACTION";
    40     case Commit:         return "COMMIT";
    41     case Uncommit:       return "UNCOMMIT";
    42     default:             ShouldNotReachHere();
    43   }
    44   // trying to keep the Windows compiler happy
    45   return NULL;
    46 }
    48 const char* G1HRPrinter::region_type_name(RegionType type) {
    49   switch (type) {
    50     case Unset:              return NULL;
    51     case Eden:               return "Eden";
    52     case Survivor:           return "Survivor";
    53     case Old:                return "Old";
    54     case SingleHumongous:    return "SingleH";
    55     case StartsHumongous:    return "StartsH";
    56     case ContinuesHumongous: return "ContinuesH";
    57     default:                 ShouldNotReachHere();
    58   }
    59   // trying to keep the Windows compiler happy
    60   return NULL;
    61 }
    63 const char* G1HRPrinter::phase_name(PhaseType phase) {
    64   switch (phase) {
    65     case StartGC:     return "StartGC";
    66     case EndGC:       return "EndGC";
    67     case StartFullGC: return "StartFullGC";
    68     case EndFullGC:   return "EndFullGC";
    69     default:          ShouldNotReachHere();
    70   }
    71   // trying to keep the Windows compiler happy
    72   return NULL;
    73 }
    75 #define G1HR_PREFIX     " G1HR"
    77 void G1HRPrinter::print(ActionType action, RegionType type,
    78                         HeapRegion* hr, HeapWord* top) {
    79   const char* action_str = action_name(action);
    80   const char* type_str   = region_type_name(type);
    81   HeapWord* bottom = hr->bottom();
    83   if (type_str != NULL) {
    84     if (top != NULL) {
    85       gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT,
    86                              action_str, type_str, bottom, top);
    87     } else {
    88       gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT,
    89                              action_str, type_str, bottom);
    90     }
    91   } else {
    92     if (top != NULL) {
    93       gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT,
    94                              action_str, bottom, top);
    95     } else {
    96       gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT,
    97                              action_str, bottom);
    98     }
    99   }
   100 }
   102 void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) {
   103   const char* action_str = action_name(action);
   105   gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]",
   106                          action_str, bottom, end);
   107 }
   109 void G1HRPrinter::print(PhaseType phase, size_t phase_num) {
   110   const char* phase_str = phase_name(phase);
   111   gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num);
   112 }

mercurial