RFR: 8066821(S) Enhance command line processing to manage deprecating and obsoleting -XX command line arguments

Derek White derek.white at oracle.com
Tue Feb 3 23:30:19 UTC 2015


Request for review (again):

- Updated with Kim's suggestion.
- Stopped double-printing warnings in some cases.
- Initial caps on warning() messages.

Webrev:  http://cr.openjdk.java.net/~drwhite/8066821/webrev.04/
CR:         https://bugs.openjdk.java.net/browse/JDK-8066821
Tests:     jtreg, jprt

Thanks for looking!

  - Derek

On 1/28/15 3:47 PM, Kim Barrett wrote:
> On Jan 15, 2015, at 6:34 PM, Derek White <derek.white at oracle.com> wrote:
>> Hi All,
>>
>> I need another review, especially someone from runtime. Coleen, do you want crack at it or can you forward as needed?
>>
>> Another version for review:
>> http://cr.openjdk.java.net/~drwhite/8066821/webrev.01
> I noticed a bunch of formatting changes that were in the previous
> webrev have been eliminated in the .01 webrev.  Since I was going to
> comment or complain about at least some of them, I have no objection
> to having them backed out.
>
> This is not a complete review; I've only gotten part way through the
> first file!  Unfortunately, I'm swamped with other things right now
> and don't seem to be making progress toward finishing.  So here's what
> I've got so far.
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   132     int len = (int)strlen(name);
>
> Pre-existing issue.
>
> Why is this using int and casting to int, rather than just using
> size_t?  The return type for strlen is size_t, as is the argument for
> strncmp where len is used, and the other use of len also can/should be
> size_t.
>
> [I only noticed this because an earlier webrev tweaked the formatting
> of this line.]
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   235     const char* spec_vendor = "Sun Microsystems Inc.";
>   236     uint32_t spec_version = 0;
>
> Dead initializers; the variables are immediately reassigned new
> values.
>
> This is a pre-existing defect that I wouldn't have even noticed had
> the enum for bufsz not been reformatted in a previous webrev.  (How's
> that for a lesson in being lazy. :-)
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   253  *  -XX arguments are usually defined in globals.hpp, globals_<cpu>.hpp, globals_<os>.hpp, <compiler>_globals.hpp, or <gc>_globals.hpp.
>
> Rather than "are usually defined in" I think better would be something
> like "are defined several places, such as".
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   251  *  -XX argument processing:
>
> While the Hotspot style guidelines explicitly don't specify a line
> length limit, I find lines that are long enough that they don't fit in
> one side of a side-by-side webrev on a reasonable-sized landscape
> monitor with a font size I can read without having to scroll the frame
> back and forth to be pretty annoying.
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   419     if (((strncmp(flag_status.name, s, len) == 0) &&
>   420           (strlen(s) == len)) ||
>   421          ((s[0] == '+' || s[0] == '-') &&
>   422           (strncmp(flag_status.name, &s[1], len) == 0) &&
>   423           (strlen(&s[1]) == len))) {
>
> Pre-existing issue.
>
> The calls to strlen and comparisons to len on lines 420 and 423 could
> be replaced with
>
> 420:  s[len] == '\0'
>
> 423:  s[len+1] == '\0'
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   449     size_t len = strlen(flag_status.alias_name);
>   450     if (((strncmp(flag_status.alias_name, flag_name, len) == 0) &&
>   451          (strlen(flag_name) == len))) {
>
> There is no point to using strlen() and strncmp() here.  Just use
> strcmp(), e.g.
>
>    if (strcmp(flag_status.alias_name, flag_name) == 0) {
>
> http://stackoverflow.com/questions/14885000/does-strlen-in-a-strncmp-expression-defeat-the-purpose-of-using-strncmp-ov
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   412   int i = 0;
>   413   assert(version != NULL, "Must provide a version buffer");
>   414   while (special_table[i].name != NULL) {
> ...
>   432     i++;
>
> Pre-existing issue.
>
> More readable would be to use a for-loop, e.g.
>
>    for (size_t i = 0; special_table[i].name != NULL; ++i) {
>      ...
>    }
>
> size_t is a better type for i too.
>
> ------------------------------------------------------------------------------
> src/share/vm/runtime/arguments.cpp
>   446   int i = 0;
>   447   while (aliased_jvm_flags[i].alias_name != NULL) {
> ...
>   454     i++;
>
> As above, a for-loop would be more readable.
>
> ------------------------------------------------------------------------------
>



More information about the hotspot-gc-dev mailing list