当我试图用Memory Analyzer打开HPROF文件(由Debug.dumpHprofData创建)时,我得到了以下异常:
java.io.IOException: Unknown HPROF Version (JAVA PROFILE 1.0.3)
at org.eclipse.mat.hprof.AbstractParser.readVersion(AbstractParser.java:124)
at org.eclipse.mat.hprof.Pass1Parser.read(Pass1Parser.java:69)
at org.eclipse.mat.hprof.HprofI
我试图通过使用来自eclipses视图的HPROF文件来检查内存泄漏。
我尝试使用MAT读取保存到磁盘上的.hprof,但得到了错误:
Error opening heap dump 'com.myapp.myapp.hprof'. Check the error log for further details.
Error opening heap dump 'com.myapp.myapp.hprof'. Check the error log for further details.
Unknown HPROF Version (JAVA PROFILE
有传言说,scala中的for循环比while循环慢。
慢速:
for (i <- 0 until 10000) {
f(i)
}
快速:
var i = 0
while (i < 10000) {
f(i)
i += 1
}
如何使用hprof来判断for循环是否是代码中的瓶颈?我正在使用-agentlib:hprof=cpu=samples分析我的代码,那么在"CPU示例“部分中会有什么方法呢?
我想知道我的优化工作应该集中在哪里。for循环是瓶颈吗?
正如许多有用的站点所详细描述的那样,分析Android应用程序的内存使用情况的一种方法是执行"kill -10 PID“来触发HPROF转储。这似乎可以在某些设备上运行,并且logcat通常包含以下内容:
I/dalvikvm(32170): threadid=3: reacting to signal 10
I/dalvikvm(32170): SIGUSR1 forcing GC and HPROF dump
I/dalvikvm(32170): hprof: dumping VM heap to "/data/misc/heap-dump-tm1302633572-pid
我无法使用独立的eclipse内存分析器或visualVM打开堆转储。我已经尝试了两个不同的hprof文件。VisualVM在加载堆转储时挂起,eclipse内存分析器给出了下面的错误。
Error opening heap dump 'java_pid15751.hprof'. Check the error log for further details.
Error opening heap dump 'java_pid15751.hprof'. Check the error log for further details.
Not a HPRO