Thanks Vladimir -

Looks good to me.

The only question would have been if there's any benefit in getting both releases in sync and taking the full backport and creating AFLBinaryTreeDictionary in hs24. There's time pressure on this at the minute as a tool (jmap) lies broken, so the simple fix you have seems appropriate (in hs24, vmStructs_cms.hpp still references BinaryTreeDictionary not AFLBinaryTreeDictionary).

There is some more history in email: http://mail.openjdk.java.net/pipermail/serviceability-dev/2013-January/008109.html

I added serviceability-dev on the cc too, we should encourage a further Review there. Would be great to get this reviewed today and push ahead.

Thanks
Kevin



On 04/07/13 15:50, Vladimir Kempik wrote:
Hi all,

this change fixes an issue where we could not run jmap -heap on a
java process running with -XX:+UseConcMarkSweepGC.

Partially (1 line) it's a backport of http://bugs.sun.com/view_bug.do?bug_id=8005278 from jdk8

The problem originated from the following change in hotspot:
 changeset    3294:9f059abe8cf2
 parent       3284:3c91f2c9fd21
 7131629: Generalize the CMS free list code

--- a/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Fri Apr 20 17:13:36 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Thu Mar 29 19:46:24 2012 -0700
@@ -44,11 +44,11 @@
nonstatic_field(FreeChunk, _next, FreeChunk*) \
nonstatic_field(FreeChunk, _prev, FreeChunk*) \
nonstatic_field(LinearAllocBlock, _word_size, size_t) \
- nonstatic_field(FreeList, _size, size_t) \
- nonstatic_field(FreeList, _count, ssize_t) \
- nonstatic_field(BinaryTreeDictionary, _totalSize, size_t) \
- nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary*) \ - nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList) \
+ nonstatic_field(FreeList<FreeChunk>, _size, size_t) \
+ nonstatic_field(FreeList<FreeChunk>, _count, ssize_t) \
+ nonstatic_field(BinaryTreeDictionary<FreeChunk>,_totalSize, size_t) \
+ nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary<FreeChunk>*) \ + nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList<FreeChunk>) \ nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock)
@@ -70,13 +70,13 @@
declare_toplevel_type(CompactibleFreeListSpace*) \
declare_toplevel_type(CMSCollector*) \
declare_toplevel_type(FreeChunk*) \
- declare_toplevel_type(BinaryTreeDictionary*) \
- declare_toplevel_type(FreeBlockDictionary*) \
- declare_toplevel_type(FreeList*) \
- declare_toplevel_type(FreeList) \
+ declare_toplevel_type(BinaryTreeDictionary<FreeChunk>*) \
+ declare_toplevel_type(FreeBlockDictionary<FreeChunk>*) \
+ declare_toplevel_type(FreeList<FreeChunk>*) \
+ declare_toplevel_type(FreeList<FreeChunk>) \
declare_toplevel_type(LinearAllocBlock) \
- declare_toplevel_type(FreeBlockDictionary) \
- declare_type(BinaryTreeDictionary, FreeBlockDictionary)
+ declare_toplevel_type(FreeBlockDictionary<FreeChunk>) \
+ declare_type(BinaryTreeDictionary<FreeChunk>, FreeBlockDictionary<FreeChunk>)
#define VM_INT_CONSTANTS_CMS(declare_constant) \
declare_constant(Generation::ConcurrentMarkSweep) \


This fix updates the SA code to be like the hotspot code.

Webrev: http://cr.openjdk.java.net/~mcherkas/vladimir/8015576/webrev.00/

Testing:
- JPRT
- Running jmap -heap successfully on a java process using -XX:+UseConcMarkSweepGC

Thanks,
Vladimir

Reply via email to