private void fillTagBounds(long tagStart) { long[] offset = new long[] { tagStart }; while (offset[0] < dumpBuffer.capacity()) { long start = offset[0]; int tag = readTag(offset); TagBounds bounds = tagBounds[tag]; long end = offset[0]; if (bounds == null) { TagBounds newBounds; if (tag == LOAD_CLASS) { newBounds = new LoadClassSegment(this, start, end); } else if (tag == STRING) { newBounds = new StringSegment(this, start, end); } else if (tag == STACK_TRACE) { newBounds = new StackTraceSegment(this, start, end); } else if (tag == STACK_FRAME) { newBounds = new StackFrameSegment(this, start, end); } else { newBounds = new TagBounds(tag, start, end); } tagBounds[tag] = newBounds; } else { bounds.endOffset = end; } } }
String getClassName() { int classSerial = getHprofBuffer().getInt(fileOffset + stackFrameSegment.classSerialNumberOffset); LoadClass loadClass = stackFrameSegment.hprofHeap.getLoadClassSegment().getClassBySerialNumber(classSerial); return loadClass.getName(); }
private int readLoadClassSerialNumber(long[] offset) { long start = offset[0]; if (hprofHeap.readTag(offset) != HprofHeap.LOAD_CLASS) { return 0; } return getDumpBuffer().getInt(start + classSerialNumberOffset); }
LoadClass getClassByID(long classObjectID) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; long classID = readLoadClassID(offset); if (classID == classObjectID) { return new LoadClass(this, start); } } return null; }
LoadClass getClassBySerialNumber(int classSerialNumber) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int serial = readLoadClassSerialNumber(offset); if (serial == classSerialNumber) { return new LoadClass(this, start); } } return null; }
synchronized List<JavaClass> createClassCollection() { if (classes != null) { return classes; } classes = new ArrayList<JavaClass>(1000); long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int tag = hprofHeap.readDumpTag(offset); if (tag == HprofHeap.CLASS_DUMP) { ClassDump classDump = new ClassDump(this, start); long classId = classDump.getJavaClassId(); classes.add(classDump); hprofHeap.addClassEntry(classId, start, classes.size()); } } hprofHeap.getLoadClassSegment().setLoadClassOffsets(); arrayMap = new HashMap<JavaClass, Long>(classes.size() / 15); extractSpecialClasses(); return classes; }
void setLoadClassOffsets() { ClassDumpSegment classDumpSegment = hprofHeap.getClassDumpSegment(); long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; long classID = readLoadClassID(offset); ClassDump classDump = classDumpSegment.getClassDumpByID(classID); if (classDump != null) { classDump.setClassLoadOffset(start); } } }
LoadClass getClassBySerialNumber(int classSerialNumber) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int serial = readLoadClassSerialNumber(offset); if (serial == classSerialNumber) { return new LoadClass(this, start); } } return null; }
synchronized List<JavaClass> createClassCollection() { if (classes != null) { return classes; } classes = new ArrayList<JavaClass>(1000); long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int tag = hprofHeap.readDumpTag(offset); if (tag == HprofHeap.CLASS_DUMP) { ClassDump classDump = new ClassDump(this, start); long classId = classDump.getJavaClassId(); classes.add(classDump); hprofHeap.addClassEntry(classId, start, classes.size()); } } hprofHeap.getLoadClassSegment().setLoadClassOffsets(); arrayMap = new HashMap<JavaClass, Long>(classes.size() / 15); extractSpecialClasses(); return classes; }
LoadClass getClassByID(long classObjectID) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; long classID = readLoadClassID(offset); if (classID == classObjectID) { return new LoadClass(this, start); } } return null; }
private long readLoadClassID(long[] offset) { long start = offset[0]; if (hprofHeap.readTag(offset) != HprofHeap.LOAD_CLASS) { return 0; } return getDumpBuffer().getID(start + classIDOffset); } }
String getClassName() { int classSerial = getHprofBuffer().getInt(fileOffset + stackFrameSegment.classSerialNumberOffset); LoadClass loadClass = stackFrameSegment.hprofHeap.getLoadClassSegment().getClassBySerialNumber(classSerial); return loadClass.getName(); }
LoadClass getClassBySerialNumber(int classSerialNumber) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int serial = readLoadClassSerialNumber(offset); if (serial == classSerialNumber) { return new LoadClass(this, start); } } return null; }
private void fillTagBounds(long tagStart) { long[] offset = new long[] { tagStart }; while (offset[0] < dumpBuffer.capacity()) { long start = offset[0]; int tag = readTag(offset); TagBounds bounds = tagBounds[tag]; long end = offset[0]; if (bounds == null) { TagBounds newBounds; if (tag == LOAD_CLASS) { newBounds = new LoadClassSegment(this, start, end); } else if (tag == STRING) { newBounds = new StringSegment(this, start, end); } else if (tag == STACK_TRACE) { newBounds = new StackTraceSegment(this, start, end); } else if (tag == STACK_FRAME) { newBounds = new StackFrameSegment(this, start, end); } else { newBounds = new TagBounds(tag, start, end); } tagBounds[tag] = newBounds; } else { bounds.endOffset = end; } } }
synchronized List /*<JavaClass>*/ createClassCollection() { if (classes != null) { return classes; } classes = new ArrayList /*<JavaClass>*/(1000); long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; int tag = hprofHeap.readDumpTag(offset); if (tag == HprofHeap.CLASS_DUMP) { ClassDump classDump = new ClassDump(this, start); long classId = classDump.getJavaClassId(); LongMap.Entry classEntry = hprofHeap.idToOffsetMap.put(classId, start); classes.add(classDump); classEntry.setIndex(classes.size()); } } hprofHeap.getLoadClassSegment().setLoadClassOffsets(); arrayMap = new HashMap(classes.size() / 15); extractSpecialClasses(); return classes; }
LoadClass getClassByID(long classObjectID) { long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; long classID = readLoadClassID(offset); if (classID == classObjectID) { return new LoadClass(this, start); } } return null; }
private int readLoadClassSerialNumber(long[] offset) { long start = offset[0]; if (hprofHeap.readTag(offset) != HprofHeap.LOAD_CLASS) { return 0; } return getDumpBuffer().getInt(start + classSerialNumberOffset); }
String getClassName() { int classSerial = getHprofBuffer().getInt(fileOffset + stackFrameSegment.classSerialNumberOffset); LoadClass loadClass = stackFrameSegment.hprofHeap.getLoadClassSegment().getClassBySerialNumber(classSerial); return loadClass.getName(); }
private void fillTagBounds(long tagStart) { long[] offset = new long[] { tagStart }; while (offset[0] < dumpBuffer.capacity()) { long start = offset[0]; int tag = readTag(offset); TagBounds bounds = tagBounds[tag]; long end = offset[0]; if (bounds == null) { TagBounds newBounds; if (tag == LOAD_CLASS) { newBounds = new LoadClassSegment(this, start, end); } else if (tag == STRING) { newBounds = new StringSegment(this, start, end); } else if (tag == STACK_TRACE) { newBounds = new StackTraceSegment(this, start, end); } else if (tag == STACK_FRAME) { newBounds = new StackFrameSegment(this, start, end); } else { newBounds = new TagBounds(tag, start, end); } tagBounds[tag] = newBounds; } else { bounds.endOffset = end; } } }
void setLoadClassOffsets() { ClassDumpSegment classDumpSegment = hprofHeap.getClassDumpSegment(); long[] offset = new long[] { startOffset }; while (offset[0] < endOffset) { long start = offset[0]; long classID = readLoadClassID(offset); ClassDump classDump = classDumpSegment.getClassDumpByID(classID); if (classDump != null) { classDump.setClassLoadOffset(start); } } }