=?GB2312?B?tPC4tDogRXJyb3JzIHdoZW4gdXNlICJ1bml2ZXJzZSIgY29tbQ==?= =?GB2312?B?YW5kIGluIENMSFNEQg==?=

Yumin Qi yumin.qi at oracle.com
Wed Jan 23 16:18:31 PST 2013


Yes, this is the bug. I just looked at the code, Yunda is right. In type
library, the name for BinaryTreeDictionary is AFLBinaryTreeDictionary:

type AFLBinaryTreeDictionary FreeBlockDictionary<FreeChunk> false false
false 24

_dictionary is not added to vmStructs.

/Yumin

On 1/18/2013 12:48 AM, Mikael Gerdin wrote:
> I saw an existing bug reported for this the other day:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005278
>
> I cc:ed Yumin who currently owns the bug.
>
> /Mikael
>
> On 2013-01-18 04:54, ÔÆ´ï wrote:
>> Thanks Dan!
>>
>> Regards,
>>
>> Yunda
>>
>> *·¢¼þÈË:*Daniel D. Daugherty [mailto:daniel.daugherty at oracle.com]
>> *·¢ËÍʱ¼ä:*2013Äê1ÔÂ18ÈÕ10:46
>> *ÊÕ¼þÈË:*ÔÆ´ï; serviceability-dev at openjdk.java.net
>> *Ö÷Ìâ:*Re: Errors when use "universe" command in CLHSDB
>>
>> Yunda,
>>
>> The Serviceability Agent is maintained by the Serviceability team.
>> I'm adding that alias to this e-mail thread (and Bcc'ing the Runtime
>> alias.
>>
>> Dan
>>
>> On 1/17/13 7:42 PM, ÔÆ´ïwrote:
>>
>>     Hi all,
>>
>>     This is Yunda <yunda.mly at taobao.com> <mailto:yunda.mly at taobao.com>
>>     from Alibaba Group(with OCA).
>>
>>     When I used CLHSDB( java -classpath .:$JAVA_HOME/lib/sa-jdi.jar
>>     sun.jvm.hotspot.CLHSDB) I found two errors below(the second error
>>     occurred after I made some fix). It seemed that some code about CMS
>>     in SA didn¡¯t change accordingly.
>>
>>     hsdb> universe
>>
>>     Heap Parameters:
>>
>>     Gen 0:   eden
>>     [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) space
>>     capacity = 140640256, 2.000007736049627 used
>>
>>        from [0x0000000611820000,0x0000000611820000,0x00000006128e0000)
>>     space capacity = 17563648, 0.0 used
>>
>>        to   [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000)
>>     space capacity = 17563648, 0.0 usedInvocations: 0
>>
>>     Gen 1: concurrent mark-sweep generation
>>
>>     Exception in thread "main" java.lang.ExceptionInInitializerError
>>
>>               at
>>     sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>
>>               at
>>     sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
>>
>>               at
>>     sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>>
>>               at
>>     java.lang.reflect.Constructor.newInstance(Constructor.java:395)
>>
>>               at
>>     sun.jvm.hotspot.runtime.VMObjectFactory.newObject(VMObjectFactory.java:58)
>>
>>               at
>>     sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.cmsSpace(ConcurrentMarkSweepGeneration.java:55)
>>
>>               at
>>     sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(ConcurrentMarkSweepGeneration.java:79)
>>
>>               at
>>     sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java:139)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1897)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1867)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747)
>>
>>               at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91)
>>
>>               at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35)
>>
>>     Caused by: java.lang.RuntimeException: field "_dictionary" not found
>>     in type CompactibleFreeListSpace
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:183)
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:190)
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:194)
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicType.getAddressField(BasicType.java:282)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.initialize(CompactibleFreeListSpace.java:69)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.access$000(CompactibleFreeListSpace.java:35)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace$1.update(CompactibleFreeListSpace.java:55)
>>
>>               at
>>     sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.<clinit>(CompactibleFreeListSpace.java:53)
>>
>>               ... 14 more
>>
>>     hsdb> universe
>>
>>     Heap Parameters:
>>
>>     Gen 0:   eden
>>     [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) space
>>     capacity = 140640256, 2.000007736049627 used
>>
>>        from [0x0000000611820000,0x0000000611820000,0x00000006128e0000)
>>     space capacity = 17563648, 0.0 used
>>
>>        to   [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000)
>>     space capacity = 17563648, 0.0 usedInvocations: 0
>>
>>     Gen 1: concurrent mark-sweep generation
>>
>>     free-list-space[ 0x000000064cb90000 , 0x0000000661ad0000 ) Exception
>>     in thread "main" java.lang.ExceptionInInitializerError
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.free(CompactibleFreeListSpace.java:112)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.used(CompactibleFreeListSpace.java:95)
>>
>>               at
>>     sun.jvm.hotspot.memory.CompactibleFreeListSpace.printOn(CompactibleFreeListSpace.java:137)
>>
>>               at
>>     sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(ConcurrentMarkSweepGeneration.java:79)
>>
>>               at
>>     sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java:139)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1897)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1867)
>>
>>               at
>>     sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747)
>>
>>               at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91)
>>
>>               at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35)
>>
>>     Caused by: java.lang.RuntimeException: No type named "FreeList" in
>>     database
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeDataBase.java:80)
>>
>>               at
>>     sun.jvm.hotspot.HotSpotTypeDataBase.lookupType(HotSpotTypeDataBase.java:134)
>>
>>               at
>>     sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeDataBase.java:74)
>>
>>               at
>>     sun.jvm.hotspot.memory.FreeList.initialize(FreeList.java:44)
>>
>>               at
>>     sun.jvm.hotspot.memory.FreeList.access$000(FreeList.java:34)
>>
>>               at sun.jvm.hotspot.memory.FreeList$1.update(FreeList.java:38)
>>
>>               at
>>     sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402)
>>
>>               at sun.jvm.hotspot.memory.FreeList.<clinit>(FreeList.java:36)
>>
>>               ... 11 more
>>
>>     So I made a patch to fix them and now ¡°universe¡± command works well.
>>     Could someone help to review the patch below?
>>
>>     diff -r b14da2e6f2dc -r 8652e04889a4
>>     agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary.java
>>
>>     --- /dev/null      Thu Jan 01 00:00:00 1970 +0000
>>
>>     +++
>>     b/agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary.java  
>>     Fri Jan 18 09:56:06 2013 +0800
>>
>>     @@ -0,0 +1,59 @@
>>
>>     +/*
>>
>>     + * @(#)AFLBinaryTreeDictionary.java
>>
>>     + * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All
>>     rights reserved.
>>
>>     + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>
>>     + *
>>
>>     + * This code is free software; you can redistribute it and/or modify it
>>
>>     + * under the terms of the GNU General Public License version 2 only, as
>>
>>     + * published by the Free Software Foundation.
>>
>>     + *
>>
>>     + * This code is distributed in the hope that it will be useful, but
>>     WITHOUT
>>
>>     + * ANY WARRANTY; without even the implied warranty of
>>     MERCHANTABILITY or
>>
>>     + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
>>     License
>>
>>     + * version 2 for more details (a copy is included in the LICENSE
>>     file that
>>
>>     + * accompanied this code).
>>
>>     + *
>>
>>     + * You should have received a copy of the GNU General Public
>>     License version
>>
>>     + * 2 along with this work; if not, write to the Free Software
>>     Foundation,
>>
>>     + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
>>
>>     + *
>>
>>     + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA
>>     94065 USA
>>
>>     + * or visit www.oracle.com <http://www.oracle.com> if you need
>>     additional information or have any
>>
>>     + * questions.
>>
>>     + *
>>
>>     + */
>>
>>     +
>>
>>     +package sun.jvm.hotspot.memory;
>>
>>     +
>>
>>     +import java.util.*;
>>
>>     +import sun.jvm.hotspot.debugger.*;
>>
>>     +import sun.jvm.hotspot.types.*;
>>
>>     +import sun.jvm.hotspot.runtime.*;
>>
>>     +
>>
>>     +public class AFLBinaryTreeDictionary extends VMObject {
>>
>>     +   static {
>>
>>     +      VM.registerVMInitializedObserver(new Observer() {
>>
>>     +         public void update(Observable o, Object data) {
>>
>>     +            initialize(VM.getVM().getTypeDataBase());
>>
>>     +         }
>>
>>     +      });
>>
>>     +   }
>>
>>     +
>>
>>     +   private static synchronized void initialize(TypeDataBase db) {
>>
>>     +      Type type = db.lookupType("AFLBinaryTreeDictionary");
>>
>>     +      totalSizeField = type.getCIntegerField("_total_size");
>>
>>     +   }
>>
>>     +
>>
>>     +   // Fields
>>
>>     +   private static CIntegerField totalSizeField;
>>
>>     +
>>
>>     +   // Accessors
>>
>>     +   public long size() {
>>
>>     +      return totalSizeField.getValue(addr);
>>
>>     +   }
>>
>>     +
>>
>>     +   // Constructor
>>
>>     +   public AFLBinaryTreeDictionary(Address addr) {
>>
>>     +      super(addr);
>>
>>     +   }
>>
>>     +}
>>
>>     diff -r b14da2e6f2dc -r 8652e04889a4
>>     agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java
>>
>>     ---
>>     a/agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java  
>>     Thu Jan 17 13:40:31 2013 -0500
>>
>>     +++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
>>
>>     @@ -1,59 +0,0 @@
>>
>>     -/*
>>
>>     - * @(#)BinaryTreeDictionary.java
>>
>>     - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All
>>     rights reserved.
>>
>>     - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>
>>     - *
>>
>>     - * This code is free software; you can redistribute it and/or modify it
>>
>>     - * under the terms of the GNU General Public License version 2 only, as
>>
>>     - * published by the Free Software Foundation.
>>
>>     - *
>>
>>     - * This code is distributed in the hope that it will be useful, but
>>     WITHOUT
>>
>>     - * ANY WARRANTY; without even the implied warranty of
>>     MERCHANTABILITY or
>>
>>     - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
>>     License
>>
>>     - * version 2 for more details (a copy is included in the LICENSE
>>     file that
>>
>>     - * accompanied this code).
>>
>>     - *
>>
>>     - * You should have received a copy of the GNU General Public
>>     License version
>>
>>     - * 2 along with this work; if not, write to the Free Software
>>     Foundation,
>>
>>     - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
>>
>>     - *
>>
>>     - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA
>>     94065 USA
>>
>>     - * or visit www.oracle.com <http://www.oracle.com> if you need
>>     additional information or have any
>>
>>     - * questions.
>>
>>     - *
>>
>>     - */
>>
>>     -
>>
>>     -package sun.jvm.hotspot.memory;
>>
>>     -
>>
>>     -import java.util.*;
>>
>>     -import sun.jvm.hotspot.debugger.*;
>>
>>     -import sun.jvm.hotspot.types.*;
>>
>>     -import sun.jvm.hotspot.runtime.*;
>>
>>     -
>>
>>     -public class BinaryTreeDictionary extends VMObject {
>>
>>     -   static {
>>
>>     -      VM.registerVMInitializedObserver(new Observer() {
>>
>>     -         public void update(Observable o, Object data) {
>>
>>     -            initialize(VM.getVM().getTypeDataBase());
>>
>>     -         }
>>
>>     -      });
>>
>>     -   }
>>
>>     -
>>
>>     -   private static synchronized void initialize(TypeDataBase db) {
>>
>>     -      Type type = db.lookupType("BinaryTreeDictionary");
>>
>>     -      totalSizeField = type.getCIntegerField("_totalSize");
>>
>>     -   }
>>
>>     -
>>
>>     -   // Fields
>>
>>     -   private static CIntegerField totalSizeField;
>>
>>     -
>>
>>     -   // Accessors
>>
>>     -   public long size() {
>>
>>     -      return totalSizeField.getValue(addr);
>>
>>     -   }
>>
>>     -
>>
>>     -   // Constructor
>>
>>     -   public BinaryTreeDictionary(Address addr) {
>>
>>     -      super(addr);
>>
>>     -   }
>>
>>     -}
>>
>>     diff -r b14da2e6f2dc -r 8652e04889a4
>>     agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java
>>
>>     ---
>>     a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java 
>>     Thu Jan 17 13:40:31 2013 -0500
>>
>>     +++
>>     b/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java        
>>     Fri Jan 18 09:56:06 2013 +0800
>>
>>     @@ -117,7 +117,7 @@
>>
>>             }
>>
>>             // large block
>>
>>     -      BinaryTreeDictionary bfbd = (BinaryTreeDictionary)
>>     VMObjectFactory.newObject(BinaryTreeDictionary.class,
>>
>>     +      AFLBinaryTreeDictionary bfbd = (AFLBinaryTreeDictionary)
>>     VMObjectFactory.newObject(AFLBinaryTreeDictionary.class,
>>
>>                                                                                          dictionaryField.getValue(addr));
>>
>>             size += bfbd.size();
>>
>>     diff -r b14da2e6f2dc -r 8652e04889a4
>>     agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java
>>
>>     ---
>>     a/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java        
>>     Thu Jan 17 13:40:31 2013 -0500
>>
>>     +++
>>     b/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java     
>>     Fri Jan 18 09:56:06 2013 +0800
>>
>>     @@ -41,7 +41,7 @@
>>
>>          }
>>
>>          private static synchronized void initialize(TypeDataBase db) {
>>
>>     -      Type type = db.lookupType("FreeList");
>>
>>     +      Type type = db.lookupType("FreeList<FreeChunk>");
>>
>>             sizeField = type.getCIntegerField("_size");
>>
>>             countField = type.getCIntegerField("_count");
>>
>>             headerSize = type.getSize();
>>
>>     diff -r b14da2e6f2dc -r 8652e04889a4
>>     src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
>>
>>     ---
>>     a/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp 
>>     Thu Jan 17 13:40:31 2013 -0500
>>
>>     +++
>>     b/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp        
>>     Fri Jan 18 09:56:06 2013 +0800
>>
>>     @@ -43,7 +43,8 @@
>>
>>         nonstatic_field(LinearAllocBlock,         
>>        _word_size,                                   
>>     size_t)                                \
>>
>>         nonstatic_field(AFLBinaryTreeDictionary,    
>>     _total_size,                                  
>>     size_t)                                \
>>
>>         nonstatic_field(CompactibleFreeListSpace,   
>>     _indexedFreeList[0],                          
>>     FreeList<FreeChunk>)                   \
>>
>>     -  nonstatic_field(CompactibleFreeListSpace,   
>>     _smallLinearAllocBlock,                        LinearAllocBlock)
>>
>>     +  nonstatic_field(CompactibleFreeListSpace,   
>>     _smallLinearAllocBlock,                       
>>     LinearAllocBlock)                      \
>>
>>     +  nonstatic_field(CompactibleFreeListSpace,   
>>     _dictionary,                                  
>>     FreeBlockDictionary<FreeChunk>*)
>>
>>       #define
>>     VM_TYPES_CMS(declare_type,                                        \
>>
>>     Regards,
>>
>>     Yunda
>>
>>     ------------------------------------------------------------------------
>>
>>
>>     This email (including any attachments) is confidential and may be
>>     legally privileged. If you received this email in error, please
>>     delete it immediately and do not copy it or use it for any purpose
>>     or disclose its contents to any other person. Thank you.
>>
>>     ±¾µçÓÊ(°üÀ¨Èκθ½¼þ)¿ÉÄܺ¬ÓлúÃÜ×ÊÁϲ¢ÊÜ·¨Âɱ£»¤¡£ÈçÄú²»ÊÇÕýÈ·µÄÊÕ¼þ
>>     ÈË£¬ÇëÄúÁ¢¼´É¾³ý±¾Óʼþ¡£Çë²»Òª½«±¾µçÓʽøÐи´ÖƲ¢ÓÃ×÷ÈκÎÆäËûÓÃ;¡¢»ò
>>     ͸¶±¾ÓʼþÖ®ÄÚÈÝ¡£Ð»Ð»¡£
>>
>>
>> ------------------------------------------------------------------------
>>
>> This email (including any attachments) is confidential and may be 
>> legally privileged. If you received this email in error, please delete 
>> it immediately and do not copy it or use it for any purpose or disclose 
>> its contents to any other person. Thank you.
>>
>> ±¾µçÓÊ(°üÀ¨Èκθ½¼þ)¿ÉÄܺ¬ÓлúÃÜ×ÊÁϲ¢ÊÜ·¨Âɱ£»¤¡£ÈçÄú²»ÊÇÕýÈ·µÄÊÕ¼þÈË£¬ 
>> ÇëÄúÁ¢¼´É¾³ý±¾Óʼþ¡£Çë²»Òª½«±¾µçÓʽøÐи´ÖƲ¢ÓÃ×÷ÈκÎÆäËûÓÃ;¡¢»ò͸¶±¾ÓÊ 
>> ¼þÖ®ÄÚÈÝ¡£Ð»Ð»¡£


More information about the serviceability-dev mailing list