问题描述
我想在打开文件并对其执行读写操作的Java程序中进行概要分析。要读取的文件是一个大型XML文件,我想比较内存统计信息/快照以使用批处理/流读取/标准xml解析等技术来解析该文件。
因此,假设我们有三个程序要保存快照:
BatchParsing.java
public class BatchParsing {
public static void main(String[] args) throws Exception {
File = new File("path/to/file")
// parse XML using batch logic
}
}
StreamReading.java
public class StreamReadingParsing {
public static void main(String[] args) throws Exception {
File = new File("path/to/file")
// parse XML using stream reader
}
}
normalParsing.java
public class normalParsing {
public static void main(String[] args) throws Exception {
File = new File("path/to/file")
// parse XML by loading whole file
}
}
此外,我不想分析一个文件,而是分析多个不同大小的文件,而不是对不同文件运行循环,而是想通过分别为每个文件运行上述程序来检查分析结果。>
然后,我想按如下方式保存分析快照。
- snapshot_results
- batch_results
- small_file.jps
- average_file.jps
- large_file.jps
- stream_results
- small_file.jps
- average_file.jps
- large_file.jps
- normal_parsing_results
- small_file.jps
- average_file.jps
- large_file.jps
我可以使用GUI进行上述操作,但想自动化所有这些操作。我目前在macOS上通过intelliJ使用jprofiler。
解决方法
要使用没有JProfiler GUI的配置文件,请使用offline profiling。调用
会话->集成向导->新的远程集成
在JProfiler主菜单中单击,然后在“启动模式”步骤中选择“脱机配置文件”选项。然后,您将获得在脱机模式下加载概要分析代理程序所需的VM参数。
要记录数据并保存快照,可以使用触发器或配置API。对于您来说,profiling API会更方便。
要记录CPU日期并保存整个应用程序运行的快照,请像下面这样包装代码:
Controller.startCPURecording(true);
// Your code here
Controller.stopCPURecording();
Controller.saveSnapshot(new File("<snapshot name>.jps"));