RFR: 8058563: InstanceKlass::_dependencies list isn't cleared from empty nmethodBucket entries (original) (raw)

Stefan Karlsson stefan.karlsson at oracle.com
Mon Oct 19 08🔞20 UTC 2015


On 2015-10-16 08:00, Vladimir Ivanov wrote:

Looks good.

Thanks, Vladimir.

StefanK

Best regards, Vladimir Ivanov On 10/14/15 12:36 PM, Stefan Karlsson wrote: Hi all,

Please review this patch to reintroduce deletion of entries in the InstanceKlass::dependencies list. It would be good if this could be reviewed by both the GC team and the Compiler team. http://cr.openjdk.java.net/~stefank/8058563/webrev.01/ https://bugs.openjdk.java.net/browse/JDK-8058563

Some background to this bug: Before JDK-8049421, it was guaranteed that only one thread at a time could delete an nmethodBucket in the dependencies list. JDK-8049421 parallelized the unloading of nmethods for G1 and the deletion of the entries were deferred to a later GC phase, to save the cost of having to synchronize the deletion of entries between the GC threads. The deletions are instead done at a later phase when the GC threads claim Klasses for cleaning and it's guaranteed that each Klass will only be cleaned by one GC thread. This patch will solve two problems with the current implementation of the deferred deletion: 1) Today only G1 deletes the deferred entries and all other GCs leak the entries. The patch adds calls to clean out entries from all GCs. 2) Entries used to be deleted immediately when flushdependencies was called from non-GC code, but today this code path also defers the deletion. This is unnecessary, since the callers hold the CodeCachelock while flushing the dependencies, and the code is thereby only executed by one thread at a time. The patch adds back the immediate deletion of entries, when called from non-GC code. The code has changed a bit in JDK 9, but it might still be useful to take a look at the patch that introduced the deferred deletion and compare that to the suggested patch: http://hg.openjdk.java.net/jdk8u/hs-dev/hotspot/diff/2c6ef90f030a/src/share/vm/oops/instanceKlass.cpp

Tested with: JPRT, Kitchensink, parallelclassunloading, Weblogic12medrec, runThese, new unit test Thanks, StefanK



More information about the hotspot-dev mailing list