RFR: 8066821(S) Enhance command line processing to manage deprecating and obsoleting -XX command line arguments
Derek White
derek.white at oracle.com
Thu Jan 29 21:38:14 UTC 2015
Hi Kim,
Notes inline...
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.]
OK.
> ------------------------------------------------------------------------------
> 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. :-)
Odd. OK.
> ------------------------------------------------------------------------------
> 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".
OK
> ------------------------------------------------------------------------------
> 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.
No, you need a bigger monitor :-). OK, OK...
> ------------------------------------------------------------------------------
> 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'
This usage is identical to the following case (note that it it's not
matching string prefixes, but lines 422+423 are matching suffixes).
> ------------------------------------------------------------------------------
> 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
Yes, I agree. And similarly lines 419-423 should be changed.
> ------------------------------------------------------------------------------
> 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.
>
> ------------------------------------------------------------------------------
OK, OK.
Thanks Kim!
- Derek
More information about the hotspot-gc-dev
mailing list