RFR (L): 8058354: SPECjvm2008-Derby -2.7% performance regression on Solaris-X64 starting with 9-b29

Jon Masamitsu jon.masamitsu at oracle.com
Thu Mar 26 17:26:40 UTC 2015



Is rs.size() guaranteed to be "page_size" aligned?  Or might you
need 1 more page in "size_in_pages".

   76   vmassert(_committed.size() == 0, "virtual space initialized more than once");
   77   BitMap::idx_t size_in_pages = rs.size() / page_size;
   78   _committed.resize(size_in_pages, /* in_resource_area */ false);

I would find these easier to read if "start" was "start_page".

  122 bool G1PageBasedVirtualSpace::is_area_committed(size_t start, size_t size_in_pages) const {
  123   size_t end = start + size_in_pages;
  124   return _committed.get_next_zero_offset(start, end) >= end;
  125 }
  127 bool G1PageBasedVirtualSpace::is_area_uncommitted(size_t start, size_t size_in_pages) const {
  128   size_t end = start + size_in_pages;
  129   return _committed.get_next_one_offset(start, end) >= end;
  130 }


I would prefer "commit_preferred_pages()" to "commit_full_pages()". The
"full" in the name lead me to look for something about "full" page in 
the code.
This is a throw away comment if "full" makes sense to you.

Drop the "full" in the comment.

   75   // Commit num_pages full pages of _page_size size starting from start. All argument
   76   // checking has been performed.
   77   void commit_full_pages(size_t start_page, size_t end_page);

In the comments is the sentence with "start address" needed?  Since
these are page indexes.  I'd suggest adding a comment

// Helper function for committing memory.

Because this code is about committing in different ranges (the whole 
range and the tail range), when I read "internal" in the name, I thought 
it had
to do with committing "internal" pages.  After reading the code and the 
code I understood the "internal" implied a helper function.

   71   // Commit the given memory range by using _page_size pages as much as possible
   72   // and the remainder with small sized pages. The start address must be _page_size
   73   // aligned.
   74   void commit_internal(size_t start_page, size_t end_page);


   78   // Commit the tail area.
   79   void commit_tail();

would this be a correct description?

// Commit space at the high end of the VirtualSpace
// that is smaller than the preferred page size.

Please replace with that description if you like it.

tail_size is calculated and used in commit_tail()

  158   char* const aligned_end_address = (char*)align_ptr_down(_high_boundary, _page_size);
  159   size_t const tail_size = pointer_delta(_high_boundary, aligned_end_address, sizeof(char));

A similar calculation is done in committed_size()

  104     char* aligned_high_boundary = (char*)align_ptr_up(_high_boundary, _page_size);
  105     result -= pointer_delta(aligned_high_boundary, _high_boundary, sizeof(char));

Maybe calculate the tail size once and save it for later uses.  Or
have a method to calculate tail_size.

Parameter "start" to "start_page"  seems consistent with
other parameter naming.

  114   void uncommit(size_t start, size_t size_in_pages);

Rest looks good.


On 03/18/2015 06:05 AM, Thomas Schatzl wrote:
> Hi all,
>    I got a few more internal reviews and suggestions for this change, so
> I would like to ask for re-reviews.
> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.3/ (full)
> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.2_to_3/ (diff)
> Changes:
> - changed " SIZE_FORMAT" strings in gclog_or_tty->print_cr() format
> strings to " SIZE_FORMAT " since this is the correct style.
> - moved setup of reserved space with the requirements we have to the
> ReservedSpace constructor.
> - improve readability: in G1PageBasedVirtualSpace: renamings of
> "actual_size" -> "used_size" parameter, _commit_size -> _page_size
> member
> - G1PageBasedVirtualSpace: changed uintptr_t parameter types to more
> fitting size_t
> - some refactorings, extracting a few methods to make control flow more
> clear
> Testing:
> jprt, aurora
> Thanks,
>    Thomas

More information about the hotspot-gc-dev mailing list