/** *Readasnapshotfromafile. * *@paramheapFileThenameofafilecontainingaheapdump *@paramcallStackIftrue,readthecallstackofallocaationsites
*/ publicstatic Snapshot readFile(String heapFile, boolean callStack, int debugLevel) throws IOException { int dumpNumber = 1; int pos = heapFile.lastIndexOf('#'); if (pos > -1) {
String num = heapFile.substring(pos+1, heapFile.length()); try {
dumpNumber = Integer.parseInt(num, 10);
} catch (java.lang.NumberFormatException ex) {
String msg = "In file name \"" + heapFile
+ "\", a dump number was "
+ "expected after the :, but \""
+ num + "\" was found instead.";
System.err.println(msg); thrownew IOException(msg);
}
heapFile = heapFile.substring(0, pos);
} try (FileInputStream fis = new FileInputStream(heapFile);
BufferedInputStream bis = new BufferedInputStream(fis);
PositionDataInputStream in = new PositionDataInputStream(bis)) { int i = in.readInt(); if (i == HprofReader.MAGIC_NUMBER) {
Reader r
= new HprofReader(heapFile, in, dumpNumber,
callStack, debugLevel); return r.read();
} elseif ((i >>> 8) == GZIP_HEADER_MAGIC) { // Possible gziped file, try decompress it and get the stack trace.
in.close();
String deCompressedFile = "heapdump" + System.currentTimeMillis() + ".hprof";
File out = new File(deCompressedFile); // Decompress to get dump file. try (FileInputStream heapFis = new FileInputStream(heapFile);
GZIPInputStream gis = new GZIPInputStream(heapFis);
FileOutputStream fos = new FileOutputStream(out)) { byte[] buffer = newbyte[1024 * 1024]; int len = 0; while ((len = gis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
out.delete(); thrownew IOException("Cannot decompress the compressed hprof file", e);
} // Check dump data header and print stack trace. try (FileInputStream outFis = new FileInputStream(out);
BufferedInputStream outBis = new BufferedInputStream(outFis);
PositionDataInputStream pdin = new PositionDataInputStream(outBis)) {
i = pdin.readInt(); if (i == HprofReader.MAGIC_NUMBER) {
HprofReader r
= new HprofReader(deCompressedFile, pdin, dumpNumber, true, debugLevel); return r.read();
} else { thrownew IOException("Unrecognized magic number found in decompressed data: " + i);
}
} finally {
out.delete();
}
} else { thrownew IOException("Unrecognized magic number: " + i);
}
}
}
/** *GetStackTracesfromaHproffile. * *@paramheapFileThenameofafilecontainingaheapdump
*/ publicstatic String getStack(String heapFile, int debugLevel) throws IOException { int dumpNumber = 1; int pos = heapFile.lastIndexOf('#'); if (pos > -1) {
String num = heapFile.substring(pos+1, heapFile.length()); try {
dumpNumber = Integer.parseInt(num, 10);
} catch (java.lang.NumberFormatException ex) {
String msg = "In file name \"" + heapFile
+ "\", a dump number was "
+ "expected after the :, but \""
+ num + "\" was found instead.";
System.err.println(msg); thrownew IOException(msg);
}
heapFile = heapFile.substring(0, pos);
} try (FileInputStream fis= new FileInputStream(heapFile);
BufferedInputStream bis = new BufferedInputStream(fis);
PositionDataInputStream in = new PositionDataInputStream(bis)) { int i = in.readInt(); if (i == HprofReader.MAGIC_NUMBER) {
HprofReader r
= new HprofReader(heapFile, in, dumpNumber, true, debugLevel);
r.read(); return r.printStackTraces();
} elseif ((i >>> 8) == GZIP_HEADER_MAGIC) { // Possible gziped file, try decompress it and get the stack trace.
in.close();
String deCompressedFile = "heapdump" + System.currentTimeMillis() + ".hprof";
File out = new File(deCompressedFile); // Decompress to get dump file. try (FileInputStream heapFis = new FileInputStream(heapFile);
GZIPInputStream gis = new GZIPInputStream(heapFis);
FileOutputStream fos = new FileOutputStream(out)) { byte[] buffer = newbyte[1024 * 1024]; int len = 0; while ((len = gis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
out.delete(); thrownew IOException("Cannot decompress the compressed hprof file", e);
} // Check dump data header and print stack trace. try (FileInputStream outFis = new FileInputStream(out);
BufferedInputStream outBis = new BufferedInputStream(outFis);
PositionDataInputStream pdin = new PositionDataInputStream(outBis)) {
i = pdin.readInt(); if (i == HprofReader.MAGIC_NUMBER) {
HprofReader r
= new HprofReader(deCompressedFile, pdin, dumpNumber, true, debugLevel);
r.read(); return r.printStackTraces();
} else { thrownew IOException("Unrecognized magic number found in decompressed data: " + i);
}
} finally {
out.delete();
}
} else { thrownew IOException("Unrecognized magic number: " + i);
}
}
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.11Bemerkung:
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.