src/share/vm/gc_implementation/g1/g1_globals.hpp

Mon, 02 Aug 2010 12:51:43 -0700

author
johnc
date
Mon, 02 Aug 2010 12:51:43 -0700
changeset 2060
2d160770d2e5
parent 1949
b9bc732be7c0
child 2216
c32059ef4dc0
permissions
-rw-r--r--

6814437: G1: remove the _new_refs array
Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure.
Reviewed-by: iveresov, jmasa, tonyp

     1 /*
     2  * Copyright (c) 2001, 2010, 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 //
    26 // Defines all globals flags used by the garbage-first compiler.
    27 //
    29 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
    30                                                                             \
    31   product(intx, G1ConfidencePercent, 50,                                    \
    32           "Confidence level for MMU/pause predictions")                     \
    33                                                                             \
    34   develop(intx, G1MarkingOverheadPercent, 0,                                \
    35           "Overhead of concurrent marking")                                 \
    36                                                                             \
    37   develop(bool, G1Gen, true,                                                \
    38           "If true, it will enable the generational G1")                    \
    39                                                                             \
    40   develop(intx, G1PolicyVerbose, 0,                                         \
    41           "The verbosity level on G1 policy decisions")                     \
    42                                                                             \
    43   develop(bool, G1UseHRIntoRS, true,                                        \
    44           "Determines whether the 'advanced' HR Into rem set is used.")     \
    45                                                                             \
    46   develop(intx, G1MarkingVerboseLevel, 0,                                   \
    47           "Level (0-4) of verboseness of the marking code")                 \
    48                                                                             \
    49   develop(bool, G1PrintReachableAtInitialMark, false,                       \
    50           "Reachable object dump at the initial mark pause")                \
    51                                                                             \
    52   develop(bool, G1VerifyDuringGCPrintReachable, false,                      \
    53           "If conc mark verification fails, dump reachable objects")        \
    54                                                                             \
    55   develop(ccstr, G1PrintReachableBaseFile, NULL,                            \
    56           "The base file name for the reachable object dumps")              \
    57                                                                             \
    58   develop(bool, G1TraceMarkStackOverflow, false,                            \
    59           "If true, extra debugging code for CM restart for ovflw.")        \
    60                                                                             \
    61   develop(intx, G1PausesBtwnConcMark, -1,                                   \
    62           "If positive, fixed number of pauses between conc markings")      \
    63                                                                             \
    64   diagnostic(bool, G1SummarizeConcMark, false,                              \
    65           "Summarize concurrent mark info")                                 \
    66                                                                             \
    67   diagnostic(bool, G1SummarizeRSetStats, false,                             \
    68           "Summarize remembered set processing info")                       \
    69                                                                             \
    70   diagnostic(intx, G1SummarizeRSetStatsPeriod, 0,                           \
    71           "The period (in number of GCs) at which we will generate "        \
    72           "update buffer processing info "                                  \
    73           "(0 means do not periodically generate this info); "              \
    74           "it also requires -XX:+G1SummarizeRSetStats")                     \
    75                                                                             \
    76   diagnostic(bool, G1SummarizeZFStats, false,                               \
    77           "Summarize zero-filling info")                                    \
    78                                                                             \
    79   diagnostic(bool, G1TraceConcRefinement, false,                            \
    80           "Trace G1 concurrent refinement")                                 \
    81                                                                             \
    82   product(intx, G1MarkRegionStackSize, 1024 * 1024,                         \
    83           "Size of the region stack for concurrent marking.")               \
    84                                                                             \
    85   develop(bool, G1ConcZeroFill, true,                                       \
    86           "If true, run concurrent zero-filling thread")                    \
    87                                                                             \
    88   develop(intx, G1ConcZFMaxRegions, 1,                                      \
    89           "Stop zero-filling when # of zf'd regions reaches")               \
    90                                                                             \
    91   develop(bool, G1SATBBarrierPrintNullPreVals, false,                       \
    92           "If true, count frac of ptr writes with null pre-vals.")          \
    93                                                                             \
    94   product(intx, G1SATBBufferSize, 1*K,                                      \
    95           "Number of entries in an SATB log buffer.")                       \
    96                                                                             \
    97   develop(intx, G1SATBProcessCompletedThreshold, 20,                        \
    98           "Number of completed buffers that triggers log processing.")      \
    99                                                                             \
   100   develop(intx, G1ExtraRegionSurvRate, 33,                                  \
   101           "If the young survival rate is S, and there's room left in "      \
   102           "to-space, we will allow regions whose survival rate is up to "   \
   103           "S + (1 - S)*X, where X is this parameter (as a fraction.)")      \
   104                                                                             \
   105   develop(intx, G1InitYoungSurvRatio, 50,                                   \
   106           "Expected Survival Rate for newly allocated bytes")               \
   107                                                                             \
   108   develop(bool, G1SATBPrintStubs, false,                                    \
   109           "If true, print generated stubs for the SATB barrier")            \
   110                                                                             \
   111   experimental(intx, G1ExpandByPercentOfAvailable, 20,                      \
   112           "When expanding, % of uncommitted space to claim.")               \
   113                                                                             \
   114   develop(bool, G1RSBarrierRegionFilter, true,                              \
   115           "If true, generate region filtering code in RS barrier")          \
   116                                                                             \
   117   develop(bool, G1RSBarrierNullFilter, true,                                \
   118           "If true, generate null-pointer filtering code in RS barrier")    \
   119                                                                             \
   120   develop(bool, G1PrintCTFilterStats, false,                                \
   121           "If true, print stats on RS filtering effectiveness")             \
   122                                                                             \
   123   develop(bool, G1DeferredRSUpdate, true,                                   \
   124           "If true, use deferred RS updates")                               \
   125                                                                             \
   126   develop(bool, G1RSLogCheckCardTable, false,                               \
   127           "If true, verify that no dirty cards remain after RS log "        \
   128           "processing.")                                                    \
   129                                                                             \
   130   develop(bool, G1RSCountHisto, false,                                      \
   131           "If true, print a histogram of RS occupancies after each pause")  \
   132                                                                             \
   133   develop(intx, G1PrintRegionLivenessInfo, 0,                               \
   134           "When > 0, print the occupancies of the <n> best and worst"       \
   135           "regions.")                                                       \
   136                                                                             \
   137   develop(bool, G1PrintParCleanupStats, false,                              \
   138           "When true, print extra stats about parallel cleanup.")           \
   139                                                                             \
   140   develop(bool, G1DisablePreBarrier, false,                                 \
   141           "Disable generation of pre-barrier (i.e., marking barrier)   ")   \
   142                                                                             \
   143   develop(bool, G1DisablePostBarrier, false,                                \
   144           "Disable generation of post-barrier (i.e., RS barrier)   ")       \
   145                                                                             \
   146   product(intx, G1UpdateBufferSize, 256,                                    \
   147           "Size of an update buffer")                                       \
   148                                                                             \
   149   product(intx, G1ConcRefinementYellowZone, 0,                              \
   150           "Number of enqueued update buffers that will "                    \
   151           "trigger concurrent processing. Will be selected ergonomically "  \
   152           "by default.")                                                    \
   153                                                                             \
   154   product(intx, G1ConcRefinementRedZone, 0,                                 \
   155           "Maximum number of enqueued update buffers before mutator "       \
   156           "threads start processing new ones instead of enqueueing them. "  \
   157           "Will be selected ergonomically by default. Zero will disable "   \
   158           "concurrent processing.")                                         \
   159                                                                             \
   160   product(intx, G1ConcRefinementGreenZone, 0,                               \
   161           "The number of update buffers that are left in the queue by the " \
   162           "concurrent processing threads. Will be selected ergonomically "  \
   163           "by default.")                                                    \
   164                                                                             \
   165   product(intx, G1ConcRefinementServiceIntervalMillis, 300,                 \
   166           "The last concurrent refinement thread wakes up every "           \
   167           "specified number of milliseconds to do miscellaneous work.")     \
   168                                                                             \
   169   product(intx, G1ConcRefinementThresholdStep, 0,                           \
   170           "Each time the rset update queue increases by this amount "       \
   171           "activate the next refinement thread if available. "              \
   172           "Will be selected ergonomically by default.")                     \
   173                                                                             \
   174   product(intx, G1RSetUpdatingPauseTimePercent, 10,                         \
   175           "A target percentage of time that is allowed to be spend on "     \
   176           "process RS update buffers during the collection pause.")         \
   177                                                                             \
   178   product(bool, G1UseAdaptiveConcRefinement, true,                          \
   179           "Select green, yellow and red zones adaptively to meet the "      \
   180           "the pause requirements.")                                        \
   181                                                                             \
   182   develop(intx, G1ConcRSLogCacheSize, 10,                                   \
   183           "Log base 2 of the length of conc RS hot-card cache.")            \
   184                                                                             \
   185   develop(intx, G1ConcRSHotCardLimit, 4,                                    \
   186           "The threshold that defines (>=) a hot card.")                    \
   187                                                                             \
   188   develop(bool, G1PrintOopAppls, false,                                     \
   189           "When true, print applications of closures to external locs.")    \
   190                                                                             \
   191   develop(intx, G1RSetRegionEntriesBase, 256,                               \
   192           "Max number of regions in a fine-grain table per MB.")            \
   193                                                                             \
   194   product(intx, G1RSetRegionEntries, 0,                                     \
   195           "Max number of regions for which we keep bitmaps."                \
   196           "Will be set ergonomically by default")                           \
   197                                                                             \
   198   develop(intx, G1RSetSparseRegionEntriesBase, 4,                           \
   199           "Max number of entries per region in a sparse table "             \
   200           "per MB.")                                                        \
   201                                                                             \
   202   product(intx, G1RSetSparseRegionEntries, 0,                               \
   203           "Max number of entries per region in a sparse table."             \
   204           "Will be set ergonomically by default.")                          \
   205                                                                             \
   206   develop(bool, G1RecordHRRSOops, false,                                    \
   207           "When true, record recent calls to rem set operations.")          \
   208                                                                             \
   209   develop(bool, G1RecordHRRSEvents, false,                                  \
   210           "When true, record recent calls to rem set operations.")          \
   211                                                                             \
   212   develop(intx, G1MaxVerifyFailures, -1,                                    \
   213           "The maximum number of verification failrues to print.  "         \
   214           "-1 means print all.")                                            \
   215                                                                             \
   216   develop(bool, G1ScrubRemSets, true,                                       \
   217           "When true, do RS scrubbing after cleanup.")                      \
   218                                                                             \
   219   develop(bool, G1RSScrubVerbose, false,                                    \
   220           "When true, do RS scrubbing with verbose output.")                \
   221                                                                             \
   222   develop(bool, G1YoungSurvRateVerbose, false,                              \
   223           "print out the survival rate of young regions according to age.") \
   224                                                                             \
   225   develop(intx, G1YoungSurvRateNumRegionsSummary, 0,                        \
   226           "the number of regions for which we'll print a surv rate "        \
   227           "summary.")                                                       \
   228                                                                             \
   229   product(intx, G1ReservePercent, 10,                                       \
   230           "It determines the minimum reserve we should have in the heap "   \
   231           "to minimize the probability of promotion failure.")              \
   232                                                                             \
   233   diagnostic(bool, G1PrintHeapRegions, false,                               \
   234           "If set G1 will print information on which regions are being "    \
   235           "allocated and which are reclaimed.")                             \
   236                                                                             \
   237   develop(bool, G1HRRSUseSparseTable, true,                                 \
   238           "When true, use sparse table to save space.")                     \
   239                                                                             \
   240   develop(bool, G1HRRSFlushLogBuffersOnVerify, false,                       \
   241           "Forces flushing of log buffers before verification.")            \
   242                                                                             \
   243   develop(bool, G1FailOnFPError, false,                                     \
   244           "When set, G1 will fail when it encounters an FP 'error', "       \
   245           "so as to allow debugging")                                       \
   246                                                                             \
   247   develop(bool, G1FixedTenuringThreshold, false,                            \
   248           "When set, G1 will not adjust the tenuring threshold")            \
   249                                                                             \
   250   develop(bool, G1FixedEdenSize, false,                                     \
   251           "When set, G1 will not allocate unused survivor space regions")   \
   252                                                                             \
   253   develop(uintx, G1FixedSurvivorSpaceSize, 0,                               \
   254           "If non-0 is the size of the G1 survivor space, "                 \
   255           "otherwise SurvivorRatio is used to determine the size")          \
   256                                                                             \
   257   product(uintx, G1HeapRegionSize, 0,                                       \
   258           "Size of the G1 regions.")                                        \
   259                                                                             \
   260   experimental(bool, G1UseParallelRSetUpdating, true,                       \
   261           "Enables the parallelization of remembered set updating "         \
   262           "during evacuation pauses")                                       \
   263                                                                             \
   264   experimental(bool, G1UseParallelRSetScanning, true,                       \
   265           "Enables the parallelization of remembered set scanning "         \
   266           "during evacuation pauses")                                       \
   267                                                                             \
   268   product(uintx, G1ConcRefinementThreads, 0,                                \
   269           "If non-0 is the number of parallel rem set update threads, "     \
   270           "otherwise the value is determined ergonomically.")               \
   271                                                                             \
   272   develop(intx, G1CardCountCacheExpandThreshold, 16,                        \
   273           "Expand the card count cache if the number of collisions for "    \
   274           "a particular entry exceeds this value.")                         \
   275                                                                             \
   276   develop(bool, G1VerifyCTCleanup, false,                                   \
   277           "Verify card table cleanup.")                                     \
   278                                                                             \
   279   product(uintx, G1RSetScanBlockSize, 64,                                   \
   280           "Size of a work unit of cards claimed by a worker thread"         \
   281           "during RSet scanning.")                                          \
   282                                                                             \
   283   develop(bool, ReduceInitialCardMarksForG1, false,                         \
   284           "When ReduceInitialCardMarks is true, this flag setting "         \
   285           " controls whether G1 allows the RICM optimization")
   287 G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)

mercurial