// // Handle a HPROF_GC_CLASS_DUMP // Return number of bytes read // private int readClass() throws IOException { long id = readID(); StackTrace stackTrace = getStackTraceFromSerial(in.readInt()); long superId = readID(); long classLoaderId = readID(); long signersId = readID(); long protDomainId = readID(); long reserved1 = readID(); long reserved2 = readID(); int instanceSize = in.readInt(); int bytesRead = 7 * identifierSize + 8; int numConstPoolEntries = in.readUnsignedShort(); bytesRead += 2; for (int i = 0; i < numConstPoolEntries; i++) { int index = in.readUnsignedShort(); // unused bytesRead += 2; bytesRead += readValue(null); // We ignore the values } int numStatics = in.readUnsignedShort(); bytesRead += 2; JavaThing[] valueBin = new JavaThing[1]; JavaStatic[] statics = new JavaStatic[numStatics]; for (int i = 0; i < numStatics; i++) { long nameId = readID(); bytesRead += identifierSize; byte type = in.readByte(); bytesRead++; bytesRead += readValueForType(type, valueBin); String fieldName = getNameFromID(nameId); if (version >= VERSION_JDK12BETA4) { type = signatureFromTypeId(type); } String signature = "" + ((char) type); JavaField f = new JavaField(fieldName, signature); statics[i] = new JavaStatic(f, valueBin[0]); } int numFields = in.readUnsignedShort(); bytesRead += 2; JavaField[] fields = new JavaField[numFields]; for (int i = 0; i < numFields; i++) { long nameId = readID(); bytesRead += identifierSize; byte type = in.readByte(); bytesRead++; String fieldName = getNameFromID(nameId); if (version >= VERSION_JDK12BETA4) { type = signatureFromTypeId(type); } String signature = "" + ((char) type); fields[i] = new JavaField(fieldName, signature); } String name = classNameFromObjectID.get(new Long(id)); if (name == null) { warn("Class name not found for " + toHex(id)); name = "unknown-name@" + toHex(id); } JavaClass c = new JavaClass( id, name, superId, classLoaderId, signersId, protDomainId, fields, statics, instanceSize); snapshot.addClass(id, c); snapshot.setSiteTrace(c, stackTrace); return bytesRead; }