减少堆遍历器的开销
对于小的堆来说,生成一个堆快照只需要几秒钟,但对于非常大的堆,这可能是一个漫长的过程。 空闲物理内存不足会使计算速度慢很多。例如,如果JVM有50GB的堆,而你在本地机器上分析堆转储时只有5GB的可用物理内存, JProfiler就无法在内存中保存某些索引,处理时间会不成比例地增加。
由于JProfiler主要使用本机内存进行堆分析,所以不建议增加bin/jprofiler.vmoptions
文件中的-Xmx
值,除非你遇到了OutOfMemoryError
,
并且JProfiler指示你进行这样的修改。如果有本机内存,将自动使用本机内存。在分析完成并建立内部数据库后,本机内存将被释放。
对于实时快照,分析会在生成堆转储后立即计算。当你保存快照时,分析结果会被保存到快照文件旁边后缀为.analysis
的目录中。当你打开快照文件时,很快就可以使用堆行器。如果删除了.analysis
目录,在打开快照时,会再次进行计算,
所以如果把快照发给别人,就不用把分析目录也一起发送。
如果你想在磁盘上节省内存,或者如果生成.analysis
目录不方便,你可以在常规设置中禁止创建它们。
用离线分析保存的HPROF快照和JProfiler快照旁边没有.analysis
目录,
因为分析是由JProfiler UI而不是分析代理执行的。如果在打开此类快照时不想等待计算,
可以使用 命令行可执行文件
jpanalyze来预分析快照。
建议从可写目录打开快照。当你在没有分析的情况下打开一个快照,而它的目录是不可写的,那么就会使用一个临时位置来进行分析。 然后,每次打开快照时都必须重复计算。
分析的一个重要部分是计算保留大小。如果处理时间太长,而你又不需要保留大小,你可以在堆遍历器选项对话框的开销选项中禁用其计算。 除了保留大小外,在这种情况下,"最大对象"视图也将不可用。不记录原始数据会使堆快照变小,但你将无法在引用视图中看到它们。 在打开快照时,如果你在文件选择器对话框中选择的是自定义分析,会显示相同的选项。