RFR(L): 8146395: Add inline qualifier in oop.hpp and fix inlining in gc files

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Thu Jan 14 22:26:54 UTC 2016


Hi Stefan,

thanks for looking at this change!  See comments inline, I'll come up with 
a new webrev once I have checked the template issue.

Best regards,
  Goetz.

> Hi Goetz,
> 
> Thanks for cleaning this up!
> 
> You'll have some merge conflicts with:
> 8146690: Make all classes in GC follow the naming convention
I'll rebase the change once this appears in the repo.

> So we might want to coordinate that somehow.
> 
> Inlined:
> 
> 
> On 2016-01-13 23:54, Lindenmaier, Goetz wrote: 
> 	Hi 
> 	This change finishes the cleanup started in "8146401: Clean up
> oop.hpp: add inline directives and fix header files"
> 
> 	by fixing the issues in gc files.  See also
> https://bugs.openjdk.java.net/browse/JDK-8146395
> <https://bugs.openjdk.java.net/browse/JDK-8146395>  and the discussion
> 
> 	of this change in the rt mailing list:
> <http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2016-
> January/017440.html> http://mail.openjdk.java.net/pipermail/hotspot-
> runtime-dev/2016-January/017440.html
> 
> 
> 
> 	Most issues can be fixed by including the proper .inline.hpp header
> or moving a function there.
> 
> 
> 
> 	I added new files
> src/share/vm/gc/shared/referenceProcessor.inline.hpp and
> g1SATBCardTableModRefBS.inline.hpp.
> 
> 
> 
> 	I moved the following methods to their .cpp files. In case someone
> considers these
> 
> 	performance relevant, I will add an inline.hpp file for them:
> 
> 	  PromotedObject::next and ::setNext    --> promotionInfo.cpp
> 
> 	  ObjectStartArray::object_start        --> objectStartArray.cpp
> 
> 	  FillClosure::do_addr to               --> psParallelCompact.cpp (ok, only
> used here)
> 
> 	  ageTable::add                         --> ageTable.cpp
> 
> 	  KlassSizeStats::count_array / ::count --> heapInspection.cpp
> 
> 
> 
> 	Please review this change.  I please need a sponsor.
> 
> 	http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/ <http://cr.openjdk.java.net/%7Egoetz/wr16/8146395-
> oopInline-gc/webrev.01/>
> 
> 
> 
> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/cms/cmsOopClosures.inline.hpp.frames.htm
> l
> 
> Why did you move trim_queues?
In the header, it's defined between the macros.  I wanted to have a 
similar ordering in inline.hpp as in .hpp. And Par_MarkRefsIntoAndScanClosure is
defined after MetadataAwareOopsInGenClosure.

> I'm personally not particularly fond of these macro constructs, since the
> makes it harder to navigate the code in IDEs.
>   88 DO_OOP_WORK_NV_IMPL(Par_PushOrMarkClosure)
> 
> 
> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/g1/g1SATBCardTableModRefBS.hpp.udiff.ht
> ml
> 
>    // These are the more general virtual versions.
> -  virtual void write_ref_field_pre_work(oop* field, oop new_val) {
> -    inline_write_ref_field_pre(field, new_val);
> -  }
> -  virtual void write_ref_field_pre_work(narrowOop* field, oop new_val) {
> -    inline_write_ref_field_pre(field, new_val);
> -  }
> +  inline virtual void write_ref_field_pre_work(oop* field, oop new_val);
> +  inline virtual void write_ref_field_pre_work(narrowOop* field, oop
> new_val);
> 
> I'm not sure how this is going to work. Have you verified that
> BarrierSet::write_ref_field_pre works when called while running G1?
What do you exactly mean?  As I understand, the compiler will do 
the same (or more if it now sees oop.inline.hpp) inlinings than before.
But I'll doublecheck.
 
> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/parallel/objectStartArray.cpp.udiff.html
> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/parallel/objectStartArray.hpp.udiff.html
> 
> I think object_start should be moved to an inline.hpp file, or you need to
> verify that this has no performance impact.
OK, I'll move it.

> -#undef assert_covered_region_contains
> ^ This seems like an unrelated change.
The macro is used in the functions moved.  So if it's undefed, it's
not visible in the .inlien.hpp file.
I could remove the macro altogether?

> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/parallel/psScavenge.hpp.udiff.html
> 
> There's no need for this function to be inlined.
Fixed.

> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/gc/shared/ageTable.cpp.udiff.html
> 
> Move to inline.hpp file.
Fixed.

> http://cr.openjdk.java.net/~goetz/wr16/8146395-oopInline-
> gc/webrev.01/src/share/vm/oops/oop.hpp.udiff.html
> 
> Spurious new-line
Fixed.


> 
> +  inline uint age() const;
>    inline void incr_age();
> 
> +
>    // mark-sweep support
>    void follow_body(int begin, int end);
> 
> Thanks,
> StefanK
> 
> 
> 
> 
> 
> 
> 
> 	Best regards,
> 
> 	  Goetz Lindenmaier
> 
> 
> 
> 	(The webrev messed up some change comments, the diffs and patch
> are fine, though.)
> 




More information about the hotspot-gc-dev mailing list