hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java
changeset 8076 96d498ec7ae1
parent 5547 f4b087cbb361
child 8729 cdb7525d39cb
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
   738         // ik == null for instance fields.
   738         // ik == null for instance fields.
   739         out.writeShort((short) fields.size());
   739         out.writeShort((short) fields.size());
   740         for (Iterator itr = fields.iterator(); itr.hasNext();) {
   740         for (Iterator itr = fields.iterator(); itr.hasNext();) {
   741             Field field = (Field) itr.next();
   741             Field field = (Field) itr.next();
   742             Symbol name = symTbl.probe(field.getID().getName());
   742             Symbol name = symTbl.probe(field.getID().getName());
   743             writeObjectID(name);
   743             writeSymbolID(name);
   744             char typeCode = (char) field.getSignature().getByteAt(0);
   744             char typeCode = (char) field.getSignature().getByteAt(0);
   745             int kind = signatureToHprofKind(typeCode);
   745             int kind = signatureToHprofKind(typeCode);
   746             out.writeByte((byte)kind);
   746             out.writeByte((byte)kind);
   747             if (ik != null) {
   747             if (ik != null) {
   748                 // static field
   748                 // static field
   850     }
   850     }
   851 
   851 
   852     private void writeSymbol(Symbol sym) throws IOException {
   852     private void writeSymbol(Symbol sym) throws IOException {
   853         byte[] buf = sym.asString().getBytes("UTF-8");
   853         byte[] buf = sym.asString().getBytes("UTF-8");
   854         writeHeader(HPROF_UTF8, buf.length + OBJ_ID_SIZE);
   854         writeHeader(HPROF_UTF8, buf.length + OBJ_ID_SIZE);
   855         writeObjectID(sym);
   855         writeSymbolID(sym);
   856         out.write(buf);
   856         out.write(buf);
   857     }
   857     }
   858 
   858 
   859     private void writeClasses() throws IOException {
   859     private void writeClasses() throws IOException {
   860         // write class list (id, name) association
   860         // write class list (id, name) association
   867                         Instance clazz = k.getJavaMirror();
   867                         Instance clazz = k.getJavaMirror();
   868                         writeHeader(HPROF_LOAD_CLASS, 2 * (OBJ_ID_SIZE + 4));
   868                         writeHeader(HPROF_LOAD_CLASS, 2 * (OBJ_ID_SIZE + 4));
   869                         out.writeInt(serialNum);
   869                         out.writeInt(serialNum);
   870                         writeObjectID(clazz);
   870                         writeObjectID(clazz);
   871                         out.writeInt(DUMMY_STACK_TRACE_ID);
   871                         out.writeInt(DUMMY_STACK_TRACE_ID);
   872                         writeObjectID(k.getName());
   872                         writeSymbolID(k.getName());
   873                         serialNum++;
   873                         serialNum++;
   874                     } catch (IOException exp) {
   874                     } catch (IOException exp) {
   875                         throw new RuntimeException(exp);
   875                         throw new RuntimeException(exp);
   876                     }
   876                     }
   877                 }
   877                 }
   897     // writes unique ID for an object
   897     // writes unique ID for an object
   898     private void writeObjectID(Oop oop) throws IOException {
   898     private void writeObjectID(Oop oop) throws IOException {
   899         OopHandle handle = (oop != null)? oop.getHandle() : null;
   899         OopHandle handle = (oop != null)? oop.getHandle() : null;
   900         long address = getAddressValue(handle);
   900         long address = getAddressValue(handle);
   901         writeObjectID(address);
   901         writeObjectID(address);
       
   902     }
       
   903 
       
   904     private void writeSymbolID(Symbol sym) throws IOException {
       
   905         writeObjectID(getAddressValue(sym.getAddress()));
   902     }
   906     }
   903 
   907 
   904     private void writeObjectID(long address) throws IOException {
   908     private void writeObjectID(long address) throws IOException {
   905         if (OBJ_ID_SIZE == 4) {
   909         if (OBJ_ID_SIZE == 4) {
   906             out.writeInt((int) address);
   910             out.writeInt((int) address);