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