RFR (S): 8066566: Refactor ParNewGeneration to contain ParNewTracer
Erik Helin
erik.helin at oracle.com
Thu Dec 11 08:15:13 UTC 2014
On 2014-12-10 18:40, Kim Barrett wrote:
> On Dec 10, 2014, at 9:51 AM, Marcus Larsson <marcus.larsson at oracle.com> wrote:
>>
>> Hi again,
>>
>> Updated the patch with some cleanups to use 'const ParNewTracer*' rather than 'ParNewTracer&' where appropriate.
>
> Why “pointer to const” rather than “reference to const”, e.g. use “const ParNewTracer&” instead. That would be much more usual C++ style.
It was my suggestion. I know that using a const reference here is
probably more "standard" C++, the reasons I suggested a pointer are:
- HotSpot is already rather "pointy", pointers is far more common in
our code base than references.
- I think pointers adds more information to the reader. The following
code:
gc_tracer().report_promition_failure(info);
could mean that gc_tracer() returns one of:
- GCTracer&
- const GCTracer&
- GCTracer
- (GCTracer&& ? I'm not fully up to speed on C++14)
whereas the following line:
gc_tracer()->report_promition_failure(info);
tells me that gc_tracer() returns one of:
- GCTracer* (const)
- const GCTracer* (const)
(ignore the cases when the pointer itself is const, that doesn't
matter). To me, dereferencing a pointer indicate that I'm using
memory that does not belong to my particular piece of code. With a
const reference, this situation is not as easy to identify. Or, as the
Google C++ style guide [0] puts it:
"References can be confusing, as they have value syntax but pointer
semantics."
The big advantage of a function having a const reference parameter
instead of pointer is that you don't have to check for null. If you feel
strongly about using const references, I'm fine with that as well (it is
non-const references that I really dislike :)).
Thanks,
Erik
[0]:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Reference_Arguments
More information about the hotspot-gc-dev
mailing list