Strange GC behaviour,

Jon Masamitsu jon.masamitsu at oracle.com
Thu Dec 8 03:41:26 UTC 2011


CR is 7112034

On 12/7/2011 5:44 PM, Srinivas Ramakrishna wrote:
> Hi Nhan --
>
> Make sure you have the recent fix to Reference object processing when doing
> MT/Parallel marking with CMS; i don't have the CR handy, but the fix was
> pushed by
> Stefan not long ago. (The workaround was to disable parallel concurrent
> marking via
> -XX:-CMSConcurrentMTEnabled -- but of course the performance impact of that,
> depending on yr platform, might compromise yr benchmarking results.)
>
> More inline below:-
>
> On Wed, Dec 7, 2011 at 2:20 PM, Dang Nhan Nguyen<nhann at chalmers.se>  wrote:
>
>>   Hi guys,
>>
>>   I am benchmarking CMS collector and found it strange that there are many
>> objects left in remark phase.
>>
>>   When I check the issue again by only running foreground CMS (I changed
>> the source code a bit to force CMS running in foreground), so there is no
>> promotion during collecting  (so no objects marked during Preclean and
>> Abortable Preclean phase). Even in this case, I found that there are still
>> many objects left in remark phase (in lusearch and tomcat in Dacapo
>> benchmark, they are 10 times and 1/3 of number of objects marked in
>> concmarking phase, while in suflow, they are just about 100 objects/refs).
>> Most (maybe ALL) of these objects marked in remark phase were processed by
>> refProcessingWork(). In turn, this refProcessingWork() run in single thread
>> mode. The performance was reduced a lot because of this.
>>
> -XX:+ParallelRefProcEnabled uses multiple threads to do that phase.
>
>
>>   My questions are:
>> 1. What kinds of references were processed by refProcessingWork()? weak
>> and soft ref? what are exactly they are?
>>
> all objects of type java.lang.ref.Reference (includes WeakReferencem=,
> SoftReference, FinalReference, PhantomReference).
>
>
>> 2. While I only run CMS in stop-the-world, why are there still many
>> objects left to be processed by remark, in particular here is
>> refProcessingWork()? Why aren't these references/objects processed in
>> concurrent marking phase?
>>
> I am not sure I understand the question. What do you mean by "run CMS in
> stop-the-world"? Note that Reference objects are processed
> by all kinds of collectors, young gen (minor) or whole heap (major),
> stop-world or concurrent. The volume of those objects may
> vary a bit between them based on the heap size, NewRatio etc.
>
> hope that helped.
> -- ramki
>
>
>>   Best,
>> -Nhan Nguyen
>>



More information about the hotspot-gc-dev mailing list