RFR (L) 8186777: Make Klass::_java_mirror an OopHandle
Stefan Karlsson
stefan.karlsson at oracle.com
Fri Sep 29 10:41:34 UTC 2017
Hi Coleen,
I started looking at this, but will need a second round before I've
fully reviewed the GC parts.
Here are some nits that would be nice to get cleaned up.
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/classfile/classLoaderData.cpp.frames.html
788 record_modified_oops(); // necessary?
This could be removed. Only G1 cares about deleted "weak" references.
Or we can wait until ErikÖ's GC Barrier Interface is in place and remove
it then.
----------
#ifdef CLD_DUMP_KLASSES
if (Verbose) {
Klass* k = _klasses;
while (k != NULL) {
- out->print_cr("klass " PTR_FORMAT ", %s, CT: %d, MUT: %d", k,
k->name()->as_C_string(),
- k->has_modified_oops(), k->has_accumulated_modified_oops());
+ out->print_cr("klass " PTR_FORMAT ", %s", k,
k->name()->as_C_string());
assert(k != k->next_link(), "no loops!");
k = k->next_link();
}
}
#endif // CLD_DUMP_KLASSES
Pre-existing: I don't think this will compile if you turn on
CLD_DUMP_KLASSES. k must be p2i(k).
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/classfile/classLoaderData.hpp.udiff.html
+ // Remembered sets support for the oops in the class loader data.
+ jbyte _modified_oops; // Card Table Equivalent (YC/CMS
support)
+ jbyte _accumulated_modified_oops; // Mod Union Equivalent (CMS support)
We should create a follow-up bug to change these jbytes to bools.
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/gc/g1/g1HeapVerifier.cpp.frames.html
Spurious addition:
+ G1CollectedHeap* _g1h;
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/gc/g1/g1OopClosures.hpp.udiff.html
Spurious addition?:
+ G1CollectedHeap* g1() { return _g1; }
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/gc/parallel/psScavenge.inline.hpp.patch
PSPromotionManager* _pm;
- // Used to redirty a scanned klass if it has oops
+ // Used to redirty a scanned cld if it has oops
// pointing to the young generation after being scanned.
- Klass* _scanned_klass;
+ ClassLoaderData* _scanned_cld;
Indentation.
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/gc/parallel/psTasks.cpp.frames.html
80 case class_loader_data:
81 {
82 PSScavengeCLDClosure ps(pm);
83 ClassLoaderDataGraph::cld_do(&ps);
84 }
Would you mind changing the name ps to cld_closure?
==========
http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/src/hotspot/share/gc/shared/genOopClosures.hpp.patch
+ OopsInClassLoaderDataOrGenClosure* _scavenge_closure;
// true if the the modified oops state should be saved.
bool _accumulate_modified_oops;
Indentation.
----------
+ void do_cld(ClassLoaderData* k);
Rename k?
Thanks,
StefanK
On 2017-09-28 23:36, coleen.phillimore at oracle.com wrote:
>
> Thank you to Stefan Karlsson offlist for pointing out that the previous
> .01 version of this webrev breaks CMS in that it doesn't remember
> ClassLoaderData::_handles that are changed and added while concurrent
> marking is in progress. I've fixed this bug to move the
> Klass::_modified_oops and _accumulated_modified_oops to the
> ClassLoaderData and use these fields in the CMS remarking phase to catch
> any new handles that are added. This also fixes this bug
> https://bugs.openjdk.java.net/browse/JDK-8173988 .
>
> In addition, the previous version of this change removed an optimization
> during young collection, which showed some uncertain performance
> regression in young pause times, so I added this optimization back to
> not walk ClassLoaderData during young collections if all the oops are
> old. The performance results of SPECjbb2015 now are slightly better,
> but not significantly.
>
> This latest patch has been tested on tier1-5 on linux x64 and windows
> x64 in mach5 test harness.
>
> http://cr.openjdk.java.net/~coleenp/8186777.02/webrev/
>
> Can I get at least 3 reviewers? One from each of the compiler, gc, and
> runtime group at least since there are changes to all 3.
>
> Thanks!
> Coleen
>
>
> On 9/6/17 12:04 PM, coleen.phillimore at oracle.com wrote:
>> Summary: Add indirection for fetching mirror so that GC doesn't have
>> to follow CLD::_klasses
>>
>> Thank you to Tom Rodriguez for Graal changes and Rickard for the C2
>> changes.
>>
>> Ran nightly tests through Mach5 and RBT. Early performance testing
>> showed good performance improvment in GC class loader data processing
>> time, but nmethod processing time continues to dominate. Also
>> performace testing showed no throughput regression. I'm rerunning
>> both of these performance testing and will post the numbers.
>>
>> bug link https://bugs.openjdk.java.net/browse/JDK-8186777
>> open webrev at http://cr.openjdk.java.net/~coleenp/8186777.01/webrev
>>
>> Thanks,
>> Coleen
More information about the hotspot-dev
mailing list