RFR(s): 8244733: Add ResourceHashtable::xxx_if_absent

Thomas Stüfe thomas.stuefe at gmail.com
Mon May 18 17:27:11 UTC 2020


On Mon, May 18, 2020 at 5:53 PM Robbin Ehn <robbin.ehn at oracle.com> wrote:

> Hi Thomas,
>
> On 2020-05-18 15:12, Thomas Stüfe wrote:
> > Hi Robbin,
> >
> > On Mon, May 18, 2020 at 9:19 AM Robbin Ehn <robbin.ehn at oracle.com
> > <mailto:robbin.ehn at oracle.com>> wrote:
> >
> >     Hi Thomas,
> >
> >     You have two copies of put_if_absent, if you e.g. add a private one
> >     instead:
> >
> >         V* priv_put_if_absent(K const& key, const V * value, bool*
> >     p_created) ...
> >             *ptr = value != NULL ? new (ALLOC_TYPE, MEM_TYPE) Node(hv,
> key,
> >     *value) : new (ALLOC_TYPE, MEM_TYPE) Node(hv, key);
> >
> >     You only need one.
> >
> >
> > The small gripe I have about this is that I would have to translate from
> > reference to pointer and back to reference -  somehow this seems less
> > clearer to me than that bit of duplication that is left now.
>
> Put the reference in a functor? You many options here.
>
> So the value's copy constructor and default constructor are assumed to
> be cheap? Or why do we not care about the creating values using them?
> (since the reason of having two methods is to avoid creating values)
>
>
Sorry, can you explain what you mean, or which part of my patch you refer
to?

Thanks, Thomas


> Thanks, Robbin
>
> >
> > Thanks, Thomas
> >
> >
> >     /Robbin
> >
> >     On 2020-05-16 10:33, Thomas Stüfe wrote:
> >      > Hi all.
> >      >
> >      > new version:
> >      >
> >
> http://cr.openjdk.java.net/~stuefe/webrevs/8244733--add-resourcehashtable--compute_if_absent/webrev.02/webrev/
> >      >
> >      > with Coleens feedback worked in:
> >      >
> >      > I removed the compute_if_absent() variant since of the new three
> >     methods it
> >      > seems the least useful one; this leaves us with a variant which
> >      > default-creates the value if not found, and one with puts a
> >     caller provided
> >      > value if not found. I also removed the default argument for the
> >     p_created
> >      > output.
> >      >
> >      > As per Coleen's request, I named the methods both
> >     "put_if_absent". See
> >      > comments at the method; I hope the intent is still clear.
> >      >
> >      > I also fixed up the callers and the test.
> >      >
> >      > Thanks, Thomas
> >      >
> >      >
> >      >
> >      > On Thu, May 14, 2020 at 10:08 AM Thomas Stüfe
> >     <thomas.stuefe at gmail.com <mailto:thomas.stuefe at gmail.com>>
> >      > wrote:
> >      >
> >      >> Hi,
> >      >>
> >      >> This is a continuation of the review thread:
> >      >>
> >
> https://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2020-May/039444.html
> >      >>
> >      >> I changed the title of the bug somewhat hence the new thread.
> >      >>
> >      >> JBS: https://bugs.openjdk.java.net/browse/JDK-8244733
> >      >> Webrev:
> >      >>
> >
> http://cr.openjdk.java.net/~stuefe/webrevs/8244733--add-resourcehashtable--compute_if_absent/webrev.01/webrev/
> >      >>
> >      >> This now adds three new functions to ResourceHashTable:
> >      >>
> >      >> new_if_absent(), compute_if_absent(), put_if_absent()
> >      >>
> >      >> which work very similar to their equivalents in j.u.Map.
> >      >>
> >      >> The advantage they offer is that for a typical "if map does not
> >     contain X,
> >      >> add X+value" pattern we only do the lookup once.
> >      >>
> >      >> --
> >      >>
> >      >> So I extended the scope of the item. After playing around with
> >     various
> >      >> call sites I realized that David's proposal of put_if_absent()
> >     would be
> >      >> useful, as well as a variant which just adds a default
> >     constructed value.
> >      >> All three are tested in gtest and used in real call sites.
> >      >>
> >      >> Ran tests tonight in our CI, all went through.
> >      >>
> >      >> Thanks, Thomas
> >      >>
> >      >>
> >      >>
> >
>


More information about the hotspot-runtime-dev mailing list