RFR (S): 8079091: Remove dictionary NULL check on common path of BlockFreeList methods
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Apr 30 14:04:49 UTC 2015
On 2015-04-30 15:56, Jungwoo Ha wrote:
> I agree.
> See how _humongous_dictionary is implemented. ChunkManager::print_on
> has the same const_cast.
> I just tried to be consistent on styles.
Yes. Your change looks good, given the current style.
Thanks,
StefanK
>
> On Thu, Apr 30, 2015 at 6:50 AM, Stefan Karlsson
> <stefan.karlsson at oracle.com <mailto:stefan.karlsson at oracle.com>> wrote:
>
> Hi Jung
>
> On 2015-04-30 09:37, Jungwoo Ha wrote:
>
> My original change (not embedding CHeapObj):
> http://cr.openjdk.java.net/~jwha/8079091/webrev.00/
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.00/>
> Jon's suggestion (from hotspot-gc-dev):
> http://cr.openjdk.java.net/~jwha/8079091/webrev.02/
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.02/>
> <http://cr.openjdk.java.net/~jwha/8079091/webrev.00/
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.00/>>
>
> Please take a look on .02.
>
>
> So, the suggested change to use:
> - BlockTreeDictionary* _dictionary;
> + BlockTreeDictionary _dictionary;
>
> forced you to remove the const qualifier for dictionary():
> - BlockTreeDictionary* dictionary() const { return _dictionary; }
> + BlockTreeDictionary* dictionary() { return &_dictionary; }
>
> which forced you to const_cast away the const so that you could
> call dictionary() just to then call a const function:
>
> void BlockFreelist::print_on(outputStream* st) const {
> - if (dictionary() == NULL) {
> - return;
> - }
> - dictionary()->print_free_lists(st);
> + const_cast<BlockFreelist
> *>(this)->dictionary()->print_free_lists(st);
> }
>
> This starts to look silly. If you used the member variable
> directly this could have simply been written as:
> _dictionary->print_free_lists(st);
>
> Right?
>
> StefanK
>
>
>
> On Thu, Apr 30, 2015 at 12:05 AM, Jungwoo Ha <jwha at google.com
> <mailto:jwha at google.com>> wrote:
>
> Good point.
> However, it seems that ChunkManager also has the
> ChunkTreeDictionary
> _humongous_dictionary embedded.
> My original fix was keeping it as a pointer and allocate
> it during
> BlockFreelist constructor.
> See: http://cr.openjdk.java.net/~jwha/8079091/webrev.00/
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.00/>
>
>
> On Wed, Apr 29, 2015 at 11:20 PM, David Holmes
> <david.holmes at oracle.com <mailto:david.holmes at oracle.com>>
> wrote:
>
> On 30/04/2015 4:05 PM, Jungwoo Ha wrote:
>
> http://cr.openjdk.java.net/~jwha/8079091/webrev.01
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.01>
>
> I may be missing something but you seem to have
> embedded an object that
> is defined to be CHeapObj !
>
> David
>
>
> PTAL.
>
> On Wed, Apr 29, 2015 at 10:22 PM, Jungwoo Ha
> <jwha at google.com <mailto:jwha at google.com>> wrote:
>
> The slower ones have higher error bars (error
> bars are 95% confidence
>
> interval), and you can see that those are not
> statistically significant.
> I'll reflect your suggestions and upload the
> new webrev.
>
> On Wed, Apr 29, 2015 at 10:00 PM, Kim Barrett
> <kim.barrett at oracle.com
> <mailto:kim.barrett at oracle.com>>
> wrote:
>
> On Apr 29, 2015, at 7:34 PM, Jungwoo Ha
> <jwha at google.com <mailto:jwha at google.com>> wrote:
>
> BUG:
> https://bugs.openjdk.java.net/browse/JDK-8079091
> Webrev:
> http://cr.openjdk.java.net/~jwha/8079091/webrev.00/
> <http://cr.openjdk.java.net/%7Ejwha/8079091/webrev.00/>
>
> Can someone sponsor this change?
> I've seen ~3% speed up on DaCapo
> benchmarks. (results attached on the
>
> bug
>
> page.)
>
> Wow!
>
> Hm. There are a couple of benchmarks that
> are a little bit slower. I
> don't know enough about that suite of
> benchmarks to know how important
> that might be.
>
> Since the dictionary is always being
> created at construction time, the
> null check in ~BlockFreelist is no longer
> needed either.
>
> It seems like a further improvement might
> be obtained by making the
> dictionary a direct member subobject of
> BlockFreelist, rather than
> allocating it as a separate object,
> thereby eliminating an
> indirection.
>
> Pre-existing: Why is there a cast in
> SpaceManager::block_freelists()?
>
> Pre-existing: I found the private
> BlockFreelist::dictionary() member
> function distracting rather than helpful,
> and would have preferred
> just using the private data member
> directly. But maybe that's just me.
> If _dictionary is changed to a subobject
> rather than a pointer, I'd
> suggest changing a bunch of
> "dictionary()->XXX" to "_dictionary.XXX".
>
>
>
>
>
More information about the hotspot-runtime-dev
mailing list