Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ellipticgroup/Brent Boyer的java基准测试_Java_Benchmarking - Fatal编程技术网

使用Ellipticgroup/Brent Boyer的java基准测试

使用Ellipticgroup/Brent Boyer的java基准测试,java,benchmarking,Java,Benchmarking,我试图使用这里提到的java基准: 可在此处下载: 我尝试使用上面文章中的基本示例: import bb.util.Benchmark; public class ShortIndexesLoop { public static void main(String[] args) throws Exception { Callable<Integer> task = new Callable<Integer>() {

我试图使用这里提到的java基准: 可在此处下载:

我尝试使用上面文章中的基本示例:

import bb.util.Benchmark;

public class ShortIndexesLoop {

    public static void main(String[] args) throws Exception {
        Callable<Integer> task = 
            new Callable<Integer>() { public Integer call() { return fibonacci(35); } };
            System.out.println("fibonacci(35): " + new Benchmark(task));
    }

    protected static int fibonacci(int n) throws IllegalArgumentException {
        if (n < 0) throw new IllegalArgumentException("n = " + n + " < 0");
        if (n <= 1) return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
import bb.util.Benchmark;
公共类短索引{
公共静态void main(字符串[]args)引发异常{
可调用任务=
新的Callable(){public Integer call(){return fibonacci(35);}};
System.out.println(“斐波那契(35):”+新基准(任务));
}
受保护的静态int fibonacci(int n)抛出IllegalArgumentException{
如果(n<0)抛出新的IllegalArgumentException(“n=“+n+”<0”);

如果(n我知道这是一个老问题,但也许我的解决方案对其他人也很有用:在这个基准框架的
StringUtil
类的源代码中,记录了为什么要进行这种检查。基于此,如果您有一个JDK,其中
substring
创建底层字符数组相关部分的副本,您可以n只需注释
stringconstructortrimsgarbage
标志,在
newString
方法中,您只需返回s。

可能与Java 7中的实现更改不兼容:有没有办法在不更改为Java 1.6或1.8的情况下处理此问题?Java 8没有帮助,因为此更改仍然存在编辑:或尝试使用其他ofc库,但我无法推荐,甚至无法命名。
java.lang.Exception: substring does NOT share the same underlying char[] with its parent String
    at bb.util.StringUtil.inspectStringConstructor(StringUtil.java:84)
    at bb.util.StringUtil.<clinit>(StringUtil.java:75)
    at bb.io.ConsoleUtil.<clinit>(ConsoleUtil.java:81)
    at bb.util.Benchmark.sendUserMsg(Benchmark.java:1002)
    at bb.util.Benchmark.osSpecificPreparation(Benchmark.java:579)
    at bb.util.Benchmark.perform(Benchmark.java:541)
    at bb.util.Benchmark.<init>(Benchmark.java:464)
    at bb.util.Benchmark.<init>(Benchmark.java:439)
    at ShortIndexesLoop.main(fib.java:13)
private static final boolean stringContructorTrimsGarbage = inspectStringConstructor();

private static boolean inspectStringConstructor() {
    try {
            // first prove that substring shares the same underlying char[] as the parent String:
        String s1 = "abc123def";
        String s2 = s1.substring(3, 6);
        char[] value1 = (char[]) ReflectUtil.get(s1, "value");
        char[] value2 = (char[]) ReflectUtil.get(s2, "value");
        if (value1 != value2) throw new Exception("substring does NOT share the same underlying char[] with its parent String");
        if (value2.length != s1.length()) throw new Exception("value2.length = " + value2.length + " != s1.length() = " + s1.length());

            // second prove that the String(String) constructor trims garbage chars:
        String s3 = new String(s2);
        char[] value3 = (char[]) ReflectUtil.get(s3, "value");
        if (value3 == value2) throw new Exception("new String shares the same underlying char[] with its String arg");
        if (!(value3.length < value2.length)) throw new Exception("value3.length = " + value3.length + " is not < value2.length = " + value2.length);

        return true;
    }
    catch (Exception e) {
        LogUtil.getLogger2().logp(Level.WARNING, "StringUtil", "<clinit>", "String does not behave as expected; see cause", e);
        return false;
    }
}