Java计算密集型任务

Java计算密集型任务,java,android,performance,testing,processing,Java,Android,Performance,Testing,Processing,我想比较android设备和linux虚拟机的计算性能。(我硕士论文的一部分)测试必须使用某种输入(例如图像或数字),并且必须有一些输出 例如,一个jar文件可以制作一些图像的全景图。或者是密码破解 另一个要求是,测试必须以编程方式启动。因此,必须能够通过java方法调用开始全景制作或密码破解 是否有开源项目或jar文件来进行此测试 更新: 链接的答案不是我要搜索的: @林斯基:只有想法,没有实现。如果任务可以是“现实生活”场景,那就更好了。例如,获取大全景图片,或破解密码 更新2: “测试必须

我想比较android设备和linux虚拟机的计算性能。(我硕士论文的一部分)测试必须使用某种输入(例如图像或数字),并且必须有一些输出

例如,一个jar文件可以制作一些图像的全景图。或者是密码破解

另一个要求是,测试必须以编程方式启动。因此,必须能够通过java方法调用开始全景制作或密码破解

是否有开源项目或jar文件来进行此测试

更新: 链接的答案不是我要搜索的: @林斯基:只有想法,没有实现。如果任务可以是“现实生活”场景,那就更好了。例如,获取大全景图片,或破解密码

更新2:
“测试必须使用某种输入(例如图像或数字),还必须有一些输出。”+“如果任务可以是“现实生活”场景就更好了”

这个Fibonnaci序列让我的所有4个核心都达到了接近100%:

public static BigInteger fib(BigInteger n) {
    if (n.compareTo(BigInteger.ONE) == -1 || n.compareTo(BigInteger.ONE) == 0 ) return n;
    else 
        return fib(n.subtract(BigInteger.ONE)).add(fib(n.subtract(BigInteger.ONE).subtract(BigInteger.ONE)));
}

public static void main(String[] args) {
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    for (int j = 0; j < 10; j++) {
        final int ID = j;
        executorService.submit(new Runnable() {

            public void run() {
                for (int i=0;i < Integer.MAX_VALUE; i++) {
                    System.out.println(ID+" worker: "+i + ": " + fib(new BigInteger(String.valueOf(i))));
                }
            }
        });
    }        
}
公共静态biginger fib(biginger n){
如果(n.compareTo(BigInteger.ONE)=-1 | | n.compareTo(BigInteger.ONE)==0)返回n;
其他的
返回fib(n.subtract(biginger.ONE)).add(fib(n.subtract(biginger.ONE).subtract(biginger.ONE));
}
公共静态void main(字符串[]args){
ExecutorService ExecutorService=Executors.newFixedThreadPool(10);
对于(int j=0;j<10;j++){
最终int ID=j;
executorService.submit(新的Runnable(){
公开募捐{
对于(int i=0;i
对于基准测试来说,这可能还不够好:

但是写起来需要15分钟,而且是CPU密集型的。关于现实生活中的例子,请阅读HotLicks的评论。因此,如果您想要密码破解程序,这里是查找素数的最不有效的方法,这是:

public静态布尔值isPrime(biginger n){
BigInteger计数器=BigInteger.ONE.add(BigInteger.ONE);
布尔值isPrime=true;
while(计数器比较(n)=-1){
if(n.余数(计数器).compareTo(BigInteger.ZERO)==0){
isPrime=false;
打破
}
计数器=计数器.add(biginger.ONE);
}
返还优先权;
}
公共静态void main(字符串[]args){
ExecutorService ExecutorService=Executors.newFixedThreadPool(10);
对于(int j=0;j<10;j++){
最终int ID=j;
executorService.submit(新的Runnable(){
公开募捐{
BigInteger数=BigInteger.1;
while(true){
System.out.println(ID+“worker:+number+”:“+isPrime(number));
number=number.add(biginger.ONE);
}
}
});
}        
}
它的CPU密集度低于Fibonnaci:

可能是因为Fibonnaci有递归调用


链接的是已知CPU密集型问题的列表。它甚至提到了。

我建议您将问题分开,因为您显然在寻找两个不同的答案。您说启动任务应该从java方法调用开始。从哪里来?设备本身还是一台单独的机器?您想要的是找到一个Java基准。可能有几十个“公认的”基准测试,其中一些是为服务器设计的,而另一些则非常琐碎,因此无效。找到正确的一个(或多个)将是您的第一项任务(请记住,所有基准测试,尤其是Java基准测试,都不能代表“真正的”性能)。@PaulLammertsma我只想找到一件事:计算密集型jar。全景制作和密码破解只是例子。我想从我的java代码(在同一台设备上运行)调用该方法@duffymo谢谢你的评论,它真的很有帮助。。。你应该把问题再读几遍才能理解它:)
public static boolean isPrime(BigInteger n) {
    BigInteger counter = BigInteger.ONE.add(BigInteger.ONE);
    boolean isPrime = true;
    while (counter.compareTo(n) == -1) {
        if (n.remainder(counter).compareTo(BigInteger.ZERO) == 0) {
            isPrime = false;
            break;
        }
        counter = counter.add(BigInteger.ONE);
    }
    return isPrime;
}

public static void main(String[] args) {
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    for (int j = 0; j < 10; j++) {
        final int ID = j;
        executorService.submit(new Runnable() {
            public void run() {
                BigInteger number = BigInteger.ONE;
                while(true) {
                    System.out.println(ID+" worker: "+number + ": " + isPrime(number));
                    number = number.add(BigInteger.ONE);
                }
            }
        });
    }        
}