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; }
canContain = Boolean.valueOf(javaClass.canContainItself()); canContainItself.put(javaClass,canContain); JavaClass cls = ip.getJavaClass(); if (javaClass.equals(cls)) { return true;
public List<Field> getFields() { List<Field> filedsList = classDumpSegment.fieldsCache.get(this); if (filedsList == null) { filedsList = computeFields(); classDumpSegment.fieldsCache.put(this,filedsList); } return filedsList; }
public Instance getClassLoader() { return getHprof().getInstanceByID(getClassLoaderId()); }
boolean canContainItself() { if (getInstancesCount()>=2 && !CANNOT_CONTAIN_ITSELF.contains(getName())) { Iterator<Field> fieldsIt = getAllInstanceFields().iterator(); while(fieldsIt.hasNext()) { Field f = (Field) fieldsIt.next(); if (f.getType().getName().equals("object")) { // NOI18N return true; } } } if (DEBUG) { if (instances>10) System.out.println(getName()+" cannot contain itself "+instances); // NOI18N } return false; }
void findStaticReferencesFor(long instanceId, List<Value> refs) { int i; HprofByteBuffer buffer = getHprofBuffer(); int idSize = buffer.getIDSize(); long fieldOffset = fileOffset + getStaticFieldOffset(); int fields = buffer.getShort(fieldOffset); List<FieldValue> staticFileds = null; HprofHeap heap = getHprof(); fieldOffset += 2; for (i = 0; i < fields; i++) { byte type = buffer.get(fieldOffset + idSize); int size = heap.getValueSize(type); if ((type == HprofHeap.OBJECT) && (instanceId == buffer.getID(fieldOffset + idSize + 1))) { if (staticFileds == null) { staticFileds = getStaticFieldValues(); } refs.add(staticFileds.get(i)); } fieldOffset += (idSize + 1 + size); } if (instanceId == getClassLoaderId()) { if (staticFileds == null) { staticFileds = getStaticFieldValues(); } refs.add(staticFileds.get(fields)); } }
long instanceId = dumpBuffer.getID(start+1); long inOff = start+1+idSize+4+idSize+4; List<Field> fields = classDump.getAllInstanceFields(); Iterator<Field> fit = fields.iterator(); List<FieldValue> fields = classDump.getStaticFieldValues(); Iterator<FieldValue> fit = fields.iterator(); entry.addReference(classDump.getJavaClassId());
public boolean equals(Object obj) { if (obj instanceof ClassDumpInstance) { return classDump.equals(((ClassDumpInstance) obj).classDump); } else { return false; } }
public long getInstanceId() { return classDump.getClassLoaderId(); }
int getStaticFieldOffset() { return classDumpSegment.constantPoolSizeOffset + getConstantPoolSize(); }
public Instance getInstance() { return classDump.getClassLoader(); }
public List<FieldValue> getFieldValues() { long offset = fileOffset + getInstanceFieldValuesOffset(); List<Field> fields = dumpClass.getAllInstanceFields(); List<FieldValue> values = new ArrayList<FieldValue>(fields.size()); Iterator<Field> fit = fields.iterator(); while (fit.hasNext()) { HprofField field = (HprofField) fit.next(); if (field.getValueType() == HprofHeap.OBJECT) { values.add(new HprofInstanceObjectValue(this, field, offset)); } else { values.add(new HprofInstanceValue(this, field, offset)); } offset += field.getValueSize(); } return values; }
synchronized void computeRetainedSizeByClass() { if (retainedSizeByClassComputed) { return; } computeRetainedSize(); long[] offset = new long[] { allInstanceDumpBounds.startOffset }; while (offset[0] < allInstanceDumpBounds.endOffset) { int instanceIdOffset = 0; long start = offset[0]; int tag = readDumpTag(offset); if (tag == INSTANCE_DUMP) { instanceIdOffset = 1; } else if (tag == OBJECT_ARRAY_DUMP) { instanceIdOffset = 1; } else if (tag == PRIMITIVE_ARRAY_DUMP) { instanceIdOffset = 1; } else { continue; } long instanceId = dumpBuffer.getID(start + instanceIdOffset); Instance i = getInstanceByID(instanceId); ClassDump javaClass = (ClassDump) i.getJavaClass(); if (javaClass != null && !domTree.hasInstanceInChain(tag, i)) { javaClass.addSizeForInstance(i); } } // all done, release domTree domTree = null; retainedSizeByClassComputed = true; }
cls.findStaticReferencesFor(instanceId, refs);
void findStaticReferencesFor(long instanceId, List<Value> refs) { int i; HprofByteBuffer buffer = getHprofBuffer(); int idSize = buffer.getIDSize(); long fieldOffset = fileOffset + getStaticFieldOffset(); int fields = buffer.getShort(fieldOffset); List<FieldValue> staticFileds = null; HprofHeap heap = getHprof(); fieldOffset += 2; for (i = 0; i < fields; i++) { byte type = buffer.get(fieldOffset + idSize); int size = heap.getValueSize(type); if ((type == HprofHeap.OBJECT) && (instanceId == buffer.getID(fieldOffset + idSize + 1))) { if (staticFileds == null) { staticFileds = getStaticFieldValues(); } refs.add(staticFileds.get(i)); } fieldOffset += (idSize + 1 + size); } if (instanceId == getClassLoaderId()) { if (staticFileds == null) { staticFileds = getStaticFieldValues(); } refs.add(staticFileds.get(fields)); } }
boolean canContainItself() { if (getInstancesCount()>=2 && !CANNOT_CONTAIN_ITSELF.contains(getName())) { Iterator fieldsIt = getAllInstanceFields().iterator(); while(fieldsIt.hasNext()) { Field f = (Field) fieldsIt.next(); if (f.getType().getName().equals("object")) { // NOI18N return true; } } } if (DEBUG) { if (instances>10) System.out.println(getName()+" cannot contain itself "+instances); // NOI18N } return false; }
long instanceId = dumpBuffer.getID(start+1); long inOff = start+1+idSize+4+idSize+4; List fields = classDump.getAllInstanceFields(); Iterator fit = fields.iterator(); List fields = classDump.getStaticFieldValues(); Iterator fit = fields.iterator(); entry.addReference(classDump.getJavaClassId());
public Instance getClassLoader() { return getHprof().getInstanceByID(getClassLoaderId()); }
public boolean equals(Object obj) { if (obj instanceof ClassDumpInstance) { return classDump.equals(((ClassDumpInstance) obj).classDump); } else { return false; } }
long getInstanceID() { return classDump.getClassLoaderId(); }