int readTag(long[] offset) { long start = offset[0]; int tag = dumpBuffer.get(start); //int time = dumpBuffer.getInt(start+1); long len = dumpBuffer.getInt(start + 1 + 4) & 0xFFFFFFFFL; // len is unsigned int offset[0] = start + 1 + 4 + 4 + len; return tag; }
long getID(long offset) { if (idSize == 4) { return ((long)getInt(offset)) & 0xFFFFFFFFL; } else if (idSize == 8) { return getLong(offset); } assert false; return -1; }
Summary(HprofByteBuffer dumpBuffer, long startOffset) { assert dumpBuffer.get(startOffset) == HprofHeap.HEAP_SUMMARY; dumpBuffer.getInt(startOffset + 1); // time dumpBuffer.getInt(startOffset + 1 + 4); // tag length totalLiveBytes = dumpBuffer.getInt(startOffset + 1 + 4 + 4); totalLiveInstances = dumpBuffer.getInt(startOffset + 1 + 4 + 4 + 4); totalAllocatedBytes = dumpBuffer.getLong(startOffset + 1 + 4 + 4 + 4 + 4); totalAllocatedInstances = dumpBuffer.getLong(startOffset + 1 + 4 + 4 + 4 + 4 + 8); time = dumpBuffer.getTime(); }
public int getFrameNumber() { return heap.dumpBuffer.getInt(fileOffset + 1 + heap.dumpBuffer.getIDSize() + 4); }
int getThreadSerialNumber() { return heap.dumpBuffer.getInt(fileOffset + 1 + heap.dumpBuffer.getIDSize()); }
long getThreadSerialNumber() { return getHprofBuffer().getInt(fileOffset + stackTraceSegment.threadSerialNumberOffset); }
private int getStackTraceSerialNumber() { return heap.dumpBuffer.getInt(fileOffset + 1 + heap.dumpBuffer.getIDSize() + 4); }
int getLineNumber() { return getHprofBuffer().getInt(fileOffset + stackFrameSegment.lineNumberOffset); }
private int getThreadSerialNumber() { return heap.dumpBuffer.getInt(fileOffset + 1 + heap.dumpBuffer.getIDSize()); }
long getSerialNumber() { return getHprofBuffer().getInt(fileOffset + stackTraceSegment.stackTraceSerialNumberOffset); }
private int readLoadClassSerialNumber(long[] offset) { long start = offset[0]; if (hprofHeap.readTag(offset) != HprofHeap.LOAD_CLASS) { return 0; } return getDumpBuffer().getInt(start + classSerialNumberOffset); }
public int getLength() { HprofByteBuffer dumpBuffer = dumpClass.getHprofBuffer(); int idSize = dumpBuffer.getIDSize(); return dumpBuffer.getInt(fileOffset + 1 + idSize + 4); }
private int readStackTraceTag(long[] offset) { long start = offset[0]; if (hprofHeap.readTag(offset) != HprofHeap.STACK_TRACE) { return 0; } return getDumpBuffer().getInt(start + stackTraceSerialNumberOffset); } }
void readHeader() throws IOException { long[] offset = new long[1]; String magic = readStringNull(offset, MINIMAL_SIZE); if (DEBUG) { System.out.println("Magic " + magic); // NOI18N } if (magic1.equals(magic)) { version = JAVA_PROFILE_1_0_1; } else if (magic2.equals(magic)) { version = JAVA_PROFILE_1_0_2; } else { if (DEBUG) { System.out.println("Invalid version"); // NOI18N } String errText = ResourceBundle.getBundle("org/netbeans/lib/profiler/heap/Bundle") .getString("HprofByteBuffer_InvalidFormat"); throw new IOException(errText); } idSize = getInt(offset[0]); offset[0] += 4; time = getLong(offset[0]); offset[0] += 8; if (DEBUG) { System.out.println("ID " + idSize); // NOI18N } if (DEBUG) { System.out.println("Date " + new Date(time).toString()); // NOI18N } headerSize = offset[0]; }
private String getString(long start) { HprofByteBuffer dumpBuffer = getDumpBuffer(); if (start == -1) { return "<unknown string>"; // NOI18N } int len = dumpBuffer.getInt(start + lengthOffset); byte[] chars = new byte[len - dumpBuffer.getIDSize()]; dumpBuffer.get(start + UTF8CharsOffset, chars); String s = "Error"; // NOI18N try { s = new String(chars, "UTF-8"); // NOI18N } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); } return s; }
void addInstanceSize(ClassDump cls, int tag, long instanceOffset) { if ((tag == HprofHeap.OBJECT_ARRAY_DUMP) || (tag == HprofHeap.PRIMITIVE_ARRAY_DUMP)) { Long sizeLong = (Long) arrayMap.get(cls); long size = 0; HprofByteBuffer dumpBuffer = hprofHeap.dumpBuffer; int idSize = dumpBuffer.getIDSize(); long elementsOffset = instanceOffset + 1 + idSize + 4; if (sizeLong != null) { size = sizeLong.longValue(); } int elements = dumpBuffer.getInt(elementsOffset); int elSize; if (tag == HprofHeap.PRIMITIVE_ARRAY_DUMP) { elSize = hprofHeap.getValueSize(dumpBuffer.get(elementsOffset + 4)); } else { elSize = idSize; } size += (getMinimumInstanceSize() + ArrayDump.HPROF_ARRAY_OVERHEAD + (((long)elements) * elSize)); arrayMap.put((JavaClass)cls, Long.valueOf(size)); } }
public int getInstanceSize() { if (isArray()) { return -1; } return classDumpSegment.getMinimumInstanceSize() + getHprofBuffer().getInt(fileOffset + classDumpSegment.instanceSizeOffset); }
case HprofHeap.INT: int i = dumpBuffer.getInt(position);
String getClassName() { int classSerial = getHprofBuffer().getInt(fileOffset + stackFrameSegment.classSerialNumberOffset); LoadClass loadClass = stackFrameSegment.hprofHeap.getLoadClassSegment().getClassBySerialNumber(classSerial); return loadClass.getName(); }
StackFrame[] getStackFrames() { HprofByteBuffer buf = getHprofBuffer(); int frames = buf.getInt(fileOffset + stackTraceSegment.numberOfFramesOffset); StackFrame[] fr = new StackFrame[frames]; long idOffset = fileOffset + stackTraceSegment.framesListOffset; StackFrameSegment stackFrameSegment = stackTraceSegment.hprofHeap.getStackFrameSegment(); for (int i=0;i<frames;i++,idOffset+=buf.getIDSize()) { long frameID = buf.getID(idOffset); fr[i] = stackFrameSegment.getStackFrameByID(frameID); } return fr; }