Java 分离您的工具包会话

Java 分离您的工具包会话,java,eclipse,profiling,yourkit,Java,Eclipse,Profiling,Yourkit,我想在许多不同的输入(~1000)上分析一些代码段,因此手动运行每个测试并保存结果是没有意义的。我正在将yourkit与Eclipse结合使用来评测。有没有办法创建用于分析的“新会话”?我希望能够将每次运行分开,这样才最有意义。毫无疑问,不清楚如何运行测试。每个测试是在自己的JVM进程中运行,还是在单个JVM内的循环中运行所有测试 如果您在自己的JVM中运行每个测试,那么您需要1)使用探查器代理运行JVM,即使用-agentpath选项(详细信息在这里)。2) 指定在JVM启动时评测的内容(代理

我想在许多不同的输入(~1000)上分析一些代码段,因此手动运行每个测试并保存结果是没有意义的。我正在将yourkit与Eclipse结合使用来评测。有没有办法创建用于分析的“新会话”?我希望能够将每次运行分开,这样才最有意义。

毫无疑问,不清楚如何运行测试。每个测试是在自己的JVM进程中运行,还是在单个JVM内的循环中运行所有测试

如果您在自己的JVM中运行每个测试,那么您需要1)使用探查器代理运行JVM,即使用-agentpath选项(详细信息在这里)。2) 指定在JVM启动时评测的内容(代理选项“采样”、“跟踪”等)3)在JVM退出时捕获快照文件(“onexit”代理选项)

选项的完整列表


若您在单个JVM中运行所有测试,那个么您可以使用探查器API在测试开始之前开始提供,并在测试完成之后捕获快照。您需要使用com.yourkit.api.Controller类。

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

使用,您可以采用类似于以下方式执行此操作:

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
  }
}
公共void配置文件(字符串主机、int端口、列表inputDataSet){
Map pathMap=new HashMap();//如果要保存每个文件的位置
//初始化分析数据收集
com.yourkit.api.Controller Controller=新控制器(主机、端口);
controller.startCPUSampling(/*使用您的设置*/);
controller.startLocationRecording(/*使用您的设置*/);
//controller.startXXX包含您想要收集的任何数据
for(InputData输入:inputDataSet){
//运行您的测试
运行测试(输入数据);
//保存分析数据
字符串路径=controller.capturesnashot(/*带或不带内存转储*/);
pathMap.put(输入,路径);
//清除工具包分析数据
controller.clearAllocationData();
controller.clearCPUData();
//controller.clearXXX与您正在收集的任何数据
}
}
我认为您不需要停止收集、捕获快照、清除数据、重新开始收集,您可以捕获并清除数据,但请仔细检查。 测试运行后,您可以打开工具包中的快照并分析分析分析数据