我正在运行各种Java基准测试,并希望存档结果.我像这样执行(dacapo)基准测试:
C:\VM\jre\bin\java -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%
Run Code Online (Sandbox Code Playgroud)
我在一个参数中传递了基准类型,这就是%arg1%.
您可以看到我将输出重定向到文本文件.不幸的是,输出的第一行和最后一行仍然在控制台中打印,而不是打印在文本文件中:
===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====
Run Code Online (Sandbox Code Playgroud)
特别是最后一行在文本文件中很重要:)
是否有强制这种行为的技巧?
对于我的论文研究,我需要将一段代码注入我没有源的测试套件中的可定义方法(在本例中为 DaCapo 基准套件,http: //dacapobench.org/ )。我论文的这一部分所基于的先前研究为此使用了字节码注入,这使我也这样做了。
我使用 Apache 的 BCEL 库 ( http://commons.apache.org/proper/commons-bcel/ ) 构建了一个小程序,该程序使我能够在其他语句之前将斐波那契算法注入到方法体中。
现在,我已经做了这个,但它不能正常工作。我注入的一些方法工作正常(因为它们因为斐波那契代码而变慢),并且运行 DaCapo 框架效果很好,而其他注入的方法会破坏代码。
问题是,我不知道为什么,即使我知道哪些方法失败了,哪些方法成功了,我也无法在损坏的方法中找到重复出现的模式。
我可以粘贴一些失败的方法,但这会使这篇文章比现在更长。所以我想知道,有什么我没有考虑或忽略的事情吗?
您将在下面找到一个示例 java 文件、它的结果和我编写的 BCEL 程序。
一个简单的例子,我有一个名为 DemoClass.java 的 java 文件:
public class DemoClass {
public static void main(String[] argv) {
System.out.println("Demo body");
test();
}
public static void test() {
System.out.println("Demo test");
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 shell 中调用以下 java 命令后:
javac DemoClass.java; java -cp bcel-5.2.jar:. InjectCodeBCEL DemoClass test 123456789 ; java DemoClass
(bcel-5.2.jar文件可以在前面提到的apache网站上找到)
该程序将如下所示:
public class DemoClass {
public …Run Code Online (Sandbox Code Playgroud)