hotspot/src/share/vm/runtime/commandLineFlagConstraintsGC.cpp
author bpittore
Wed, 24 Jun 2015 12:12:25 -0400
changeset 31592 43f48e165466
parent 31371 311143309e73
child 31995 aa4049b4184a
permissions -rw-r--r--
8081202: Hotspot compile warning: "Invalid suffix on literal; C++11 requires a space between literal and identifier" Summary: Need to add a space between macro identifier and string literal Reviewed-by: stefank, dholmes, kbarrett

/*
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *
 */

#include "precompiled.hpp"
#include "runtime/arguments.hpp"
#include "runtime/commandLineFlagConstraintsGC.hpp"
#include "runtime/globals.hpp"
#include "utilities/defaultStream.hpp"

#if INCLUDE_ALL_GCS
#include "gc/g1/g1_globals.hpp"
#endif // INCLUDE_ALL_GCS
#ifdef COMPILER1
#include "c1/c1_globals.hpp"
#endif // COMPILER1
#ifdef COMPILER2
#include "opto/c2_globals.hpp"
#endif // COMPILER2

Flag::Error MinHeapFreeRatioConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value > MaxHeapFreeRatio)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
                  "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
                  *value, MaxHeapFreeRatio);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error MaxHeapFreeRatioConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value < MinHeapFreeRatio)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "MaxHeapFreeRatio (" UINTX_FORMAT ") must be greater than or "
                  "equal to MinHeapFreeRatio (" UINTX_FORMAT ")\n",
                  *value, MinHeapFreeRatio);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error MinMetaspaceFreeRatioConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value > MaxMetaspaceFreeRatio)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "MinMetaspaceFreeRatio (" UINTX_FORMAT ") must be less than or "
                  "equal to MaxMetaspaceFreeRatio (" UINTX_FORMAT ")\n",
                  *value, MaxMetaspaceFreeRatio);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error MaxMetaspaceFreeRatioConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value < MinMetaspaceFreeRatio)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "MaxMetaspaceFreeRatio (" UINTX_FORMAT ") must be greater than or "
                  "equal to MinMetaspaceFreeRatio (" UINTX_FORMAT ")\n",
                  *value, MinMetaspaceFreeRatio);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

// GC workaround for "-XX:+UseConcMarkSweepGC"
// which sets InitialTenuringThreshold to 7 but leaves MaxTenuringThreshold remaining at 6
// and therefore would invalidate the constraint
#define UseConcMarkSweepGCWorkaroundIfNeeded(initial, max) { \
  if ((initial == 7) && (max == 6)) { \
    return Flag::SUCCESS; \
  } \
}

Flag::Error InitialTenuringThresholdConstraintFunc(bool verbose, uintx* value) {
  UseConcMarkSweepGCWorkaroundIfNeeded(*value, MaxTenuringThreshold);

  if ((CommandLineFlags::finishedInitializing()) && (*value > MaxTenuringThreshold)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "InitialTenuringThreshold (" UINTX_FORMAT ") must be less than or "
                  "equal to MaxTenuringThreshold (" UINTX_FORMAT ")\n",
                  *value, MaxTenuringThreshold);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error MaxTenuringThresholdConstraintFunc(bool verbose, uintx* value) {
  UseConcMarkSweepGCWorkaroundIfNeeded(InitialTenuringThreshold, *value);

  if ((CommandLineFlags::finishedInitializing()) && (*value < InitialTenuringThreshold)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "MaxTenuringThreshold (" UINTX_FORMAT ") must be greater than or "
                  "equal to InitialTenuringThreshold (" UINTX_FORMAT ")\n",
                  *value, InitialTenuringThreshold);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

#if INCLUDE_ALL_GCS

Flag::Error G1NewSizePercentConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value > G1MaxNewSizePercent)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "G1NewSizePercent (" UINTX_FORMAT ") must be less than or "
                  "equal to G1MaxNewSizePercent (" UINTX_FORMAT ")\n",
                  *value, G1MaxNewSizePercent);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error G1MaxNewSizePercentConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value < G1NewSizePercent)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "G1MaxNewSizePercent (" UINTX_FORMAT ") must be greater than or "
                  "equal to G1NewSizePercent (" UINTX_FORMAT ")\n",
                  *value, G1NewSizePercent);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

#endif // INCLUDE_ALL_GCS

Flag::Error CMSOldPLABMinConstraintFunc(bool verbose, size_t* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value > CMSOldPLABMax)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "CMSOldPLABMin (" SIZE_FORMAT ") must be less than or "
                  "equal to CMSOldPLABMax (" SIZE_FORMAT ")\n",
                  *value, CMSOldPLABMax);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error CMSPrecleanDenominatorConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value <= CMSPrecleanNumerator)) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "CMSPrecleanDenominator (" UINTX_FORMAT ") must be strickly greater than "
                  "CMSPrecleanNumerator (" UINTX_FORMAT ")\n",
                  *value, CMSPrecleanNumerator);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error CMSPrecleanNumeratorConstraintFunc(bool verbose, uintx* value) {
  if ((CommandLineFlags::finishedInitializing()) && (*value > (CMSPrecleanDenominator - 1))) {
    if (verbose == true) {
      jio_fprintf(defaultStream::error_stream(),
                  "CMSPrecleanNumerator (" UINTX_FORMAT ") must be less than or "
                  "equal to CMSPrecleanDenominator - 1 (" UINTX_FORMAT ")\n", *value,
                  CMSPrecleanDenominator - 1);
    }
    return Flag::VIOLATES_CONSTRAINT;
  } else {
    return Flag::SUCCESS;
  }
}

Flag::Error SurvivorAlignmentInBytesConstraintFunc(bool verbose, intx* value) {
  if (CommandLineFlags::finishedInitializing()) {
    if (*value != 0) {
      if (!is_power_of_2(*value)) {
        if (verbose == true) {
          jio_fprintf(defaultStream::error_stream(),
                    "SurvivorAlignmentInBytes (" INTX_FORMAT ") must be power of 2\n",
                    *value);
        }
        return Flag::VIOLATES_CONSTRAINT;
      }
      if (*value < ObjectAlignmentInBytes) {
        if (verbose == true) {
          jio_fprintf(defaultStream::error_stream(),
                    "SurvivorAlignmentInBytes (" INTX_FORMAT ") must be greater than or "
                    "equal to ObjectAlignmentInBytes (" INTX_FORMAT ") \n",
                    *value, ObjectAlignmentInBytes);
        }
        return Flag::VIOLATES_CONSTRAINT;
      }
    }
  }
  return Flag::SUCCESS;
}