`

jdk7 fork/join 性能测试-不如for循环~~很奇怪

阅读更多
两种方法计算 Fibonacci

package jdk7;

import java.util.concurrent.RecursiveAction;
import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;

public  class Fibonacci extends RecursiveTask<Long>{ 
    final int n; 
   
    Fibonacci(int n) { 
        this.n = n; 
    } 
 
    private Long compute(int small) { 
        final Long[] results = { 1l, 1l, 2l, 3l, 5l, 8l, 13l, 21l, 34l, 55l, 89l }; 
        return results[small]; 
    } 
 
    public Long compute() { 
        if (n <= 10) { 
            return compute(n); 
        } 
// 分别计算每个 列表的 数据
//        Fibonacci f1 = new Fibonacci(n - 1); 
//        Fibonacci f2 = new Fibonacci(n - 2); 
////        System.out.println("fork new thread for " + (n - 1)); 
//        f1.fork(); 
////        System.out.println("fork new thread for " + (n - 2)); 
//        f2.fork(); 
//        return f1.join() + f2.join();
       
       
        Fibonacci f1 = new Fibonacci(n - 1); 
        f1.fork(); 
        Fibonacci f2 = new Fibonacci(n - 2); 
        return f2.compute() + f1.join(); 
    }
   
    //非递归实现
public Long sum() {
long f1 = 1, f2 = 1;
long m = 0;
if (n <= 2) {
return 1l;
} else {
for (int i = 3; i <= n; i++) {
m = f1 + f2;
f2 = f1;
f1 = m;
}
return m;
}
}
   
    public static void main(String args[]) throws InterruptedException, ExecutionException{ 
//    Fibonacci f = new Fibonacci(100);
//   
//    long t1 = new Date().getTime();
//    Integer i = f.compute();
//    long t2 = new Date().getTime();
//    System.out.println(i+"耗时:"+(t2-t1)); 
    long t1 = new Date().getTime();
    ForkJoinTask<Long> fjt = new Fibonacci(41); 
        ForkJoinPool fjpool = new ForkJoinPool(); 
        fjpool.execute(fjt); 
        Long resultInt = fjt.get(); 
        long t2 = new Date().getTime();
       
        Long j = new Fibonacci(42).sum();
        long t3 = new Date().getTime();
        System.out.println(resultInt+"耗时:"+(t2-t1)); 
        System.out.println(j+"耗时:"+(t3-t2)); 
    }
 


结果如下:
fork/join 性能不如 for循环

267914296耗时:417
267914296耗时:0
分享到:
评论

相关推荐

    jdk-8u261-linux-x641.rar

    例如,Fork/Join框架和Parallel Streams使得多线程并行计算变得更加简单和高效。 在Linux环境下,安装JDK 1.8通常涉及解压`jdk-8u261-linux-x641`这样的压缩包,然后设置`JAVA_HOME`环境变量,并将`bin`目录添加到`...

    jdk-7u80-windows-i586

    3. 并发工具加强:提供新的并发API,如Fork/Join框架,用于并行计算,以及`ConcurrentHashMap`的增强。 4. 文件系统API(NIO.2):提供了一种新的、更现代的方式来访问和操作文件系统,包括文件路径、文件属性和...

    JDK1.7(JavaSE1.7/JDK7)

    在并发编程领域,JDK7引入了Fork/Join框架,这是一种并行计算模型,适用于那些可以拆分为更小子任务的问题,例如在大量数据处理中,能显著提升性能。 JDK7还对垃圾回收机制进行了优化,包括G1(Garbage-First)垃圾...

    jdk-7u80-windows-x64

    Java 7(也称为JDK 7或Java SE 7)是一个重要的版本,它引入了许多新特性,提升了开发效率和性能。以下是一些关键的Java 7特性: 1. **多 Catch 语句**:在Java 7之前,捕获异常时需要分别编写多个catch块,但Java ...

    jdk 7版本安装包

    **Java Development Kit (JDK) 7 安装详解** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的软件包。在Java编程中,JDK是不可或缺的组成部分,它包含了编译器、Java运行环境、调试...

    jdk-1.7-win-x64.zip

    7. **Fork/Join框架**:为并行计算提供了Fork/Join框架,利用多核处理器优势提高程序执行效率。 8. **动态语言支持**:通过JSR 292,Java 7引入了“ invokedynamic ”指令,支持更多动态语言运行在Java虚拟机上,如...

    java-JDK1.7.zip java-JDK1.7.zip

    3. **多线程并行流**:Java 7引入了Fork/Join框架和并行流API,提供了处理大量数据的并行计算能力,提高了数组和集合操作的效率,如并行排序。 4. **钻石运算符**:在创建匿名内部类或使用泛型时,可以省略掉类型...

    jdk1.7.0_17版本 jdk7

    8. **语法糖**:JDK7引入了一些新的语法糖,比如在for循环中可以同时遍历Map的键和值,使得代码更加简洁。 9. **元空间(MetaSpace)**:代替了原来的永久代(Permanent Generation),用于存储类和方法的元数据,...

    JDK7u60.zip

    7. **语法糖**:包括改进的for循环(增强的for-each),可以遍历数组和集合,使得代码更加简洁。 JDK 7u60作为Java 7的一个更新,可能包含以下改进: - 安全性更新:修复了已知的安全漏洞,保护系统免受恶意攻击。...

    jdk7 2.zip

    在并发编程方面,JDK 7 增加了Fork/Join框架,它是Java Concurrency API的一部分,用于执行并行任务。它基于分治策略,将大任务分解为小任务并并行处理,从而提升程序性能。 Javadoc也进行了升级,支持HTML5和CSS3...

    jdk1.7 64位 jdk-7u80 windows

    2. **多路归并排序(Fork/Join Framework)**:这是一个并行处理框架,利用了Java的并发库,可以将大型任务拆分为小任务,以实现高效的并行执行。 3. **字符串切换(Switch Statement with Strings)**:允许在...

    jdk7安装程序2

    7. **Fork/Join框架**:这是一个并行计算框架,允许将大任务分解为小任务并行执行,提高了程序的执行效率。 8. **改进的异常处理**:JDK7允许在finally块中return,这在某些情况下可以简化代码。 9. **改进的...

    java jdk1.6 for Mac

    5. **并发编程改进**:如`ConcurrentHashMap`和`Fork/Join`框架,提高了多线程环境下程序的性能。 然而,随着时间的推移,Java已经发展到了更新的版本,比如JDK 8、JDK 11和JDK 17等,它们带来了更多新功能和性能...

    jdk7 linux

    对于`多线程编程`,JDK 7提供了`Fork/Join框架`,这是一个用于并行执行任务的框架,适用于分解大任务为小任务进行并行处理。这个框架利用了工作窃取算法,有效提高了计算密集型任务的执行效率。 在`数组操作`上,...

    jdk1.7.0_80.rar

    - **Fork/Join框架**:这是一个并行编程模型,用于提升多核处理器上的计算性能。它通过将大任务分解成小任务,利用工作窃取算法来实现并行执行。 - **动态类型语言支持**:通过JSR 292(Method Handles and ...

    jdk1.4和jdk1.7版本

    6. **Fork/Join框架**:用于并行计算,提高程序运行速度,特别是在多核处理器环境下。 7. **动态语言支持**:引入了JSR 292,使得Java虚拟机(JVM)能够支持更多动态语言。 这两个版本的JDK反映了Java技术的发展...

    jdk1.7.0_55-part1.zip

    - **Multithreaded Fork/Join Framework**:提供了更高效的并行计算框架,通过ForkJoinPool和RecursiveTask实现。 - **Project Coin**:一系列小的语法改进,比如改进的for-each循环、方法引用等。 总的来说,JDK ...

    java jdk1.7.0_79

    4. **并发与多线程**:Java 7引入了Fork/Join框架,通过工作窃取算法,优化了并行计算性能。此外,`ConcurrentHashMap`的实现也得到了增强,提高了并发访问的效率。 5. **NIO.2**:Java 7引入了New I/O 2(NIO.2)...

    jdk1.7 免安装版本

    7. **改进的for-each循环**: 可以遍历数组和集合的子范围,如`for (int i : array.subArray(start, end))`。 8. **改进的语法糖**: 如方法引用和构造函数引用,简化Lambda表达式。 9. **Fork/Join框架**: 提供了一...

Global site tag (gtag.js) - Google Analytics