我有一段代码想在许多不同的输入(〜1000)上进行分析,因此手动运行每个测试并保存结果没有任何意义。我将yourkit与Eclipse结合使用来进行概要分析。有什么方法可以创建用于分析的“新会话”吗?我希望能够将每次运行分开,这样才最有意义。

最佳答案

您实际上并不需要为每个测试创建“会话”。相反,您必须在每个测试结束时捕获性能分析数据的快照,并在运行下一个测试之前清除性能分析数据。

使用yourkit API,您可以采用类似于以下方式:

public void profile(String host, int port, List<InputData> inputDataSet) {
  Map<InputData, String> pathMap = new HashMap<InputData, String>(); //If you want to save the location of each file

  //Init profiling data collection
  com.yourkit.api.Controller controller = new Controller(host, port);
  controller.startCPUSampling(/*with your settings*/);
  controller.startAllocationRecording(/*With your settings*/);
  //controller.startXXX with whatever data you want to collect

  for (InputData input: inputDataSet) {
    //Run your test
    runTest(inputData);

    //Save profiling data
    String path = controller.captureSnapshot(/*With or without memory dump*/);
    pathMap.put(input, path);

    //Clear yourkit profiling data
    controller.clearAllocationData();
    controller.clearCPUData();
    //controller.clearXXX with whatever data you are collecting
  }
}


我认为您不需要停止收集,捕获快照,清除数据,重新开始收集,您只需捕获并清除数据,但请仔细检查。
运行测试后,您可以在工具箱中打开快照并分析配置文件数据。

关于java - 分离Yourkit session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22645140/

10-10 04:14