百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

Java 17的计算速度比Java 8慢?

ninehua 2025-03-05 19:52 32 浏览

尽管最近的一些特性可能会产生 Java 进化的错觉,但自 Java 8 以来 Java 语言并没有太大变化。

一些内置类有改进,但 Java 性能的整体改进并不容易察觉。

如果现代 Java 性能明显下降怎么办?

Java中的计算任务

Java 的性能不如 Python,但更方便用于计算。让我们进行最简单的实验,看看现代 Java 的计算能力发生了什么变化。

任何人都知道的标准计算是斐波那契数的计算。在 Java 中,它可以通过并行计算同步完成,甚至更快。甚至还有一个专门的类RecursiveTask,所以代码不像 JavaScript 或 Python 那样复杂。我尝试两种方法来计算斐波那契数。

在我的代码中,我重用了来自RecursiveTask. API 建议不要为位置 10 之前的数字启动新任务。



public class Main {
static long fibonacci(long n) {
    if (n <= 1) {
      return n;
    } else {
      return fibonacci(n - 1) + fibonacci(n - 2);
    }
  }
class Fibonacci extends RecursiveTask {
final long n;
Fibonacci(long n) {
      this.n = n;
    }
protected Long compute() {
      if (n <= 10) {
        return fibonacci(n);
      }
      Fibonacci f1 = new Fibonacci(n - 1);
      f1.fork();
      Fibonacci f2 = new Fibonacci(n - 2);
      return f2.compute() + f1.join();
    }
  }
Map<String, List> results = new HashMap<>();
void execute(IntFunction code, int num, String name) {
    long start = System.currentTimeMillis();
    long r = code.apply(num);
    long time = System.currentTimeMillis() - start;
    results.computeIfAbsent(name, k -> new LinkedList<>()).add(time);
    System.out.println(r + " in " + time + " ms");
  }
void run(int num, int repeats) {
    for (int i = 0; i < repeats i executen -> fibonacci(n), num, "one");
      execute(n -> new Fibonacci(n).compute(), num, "multi");
    }
 
    results.forEach((k, v) -> 
   System.out.println(k + " " + v.stream().mapToLong(l -> l).average().getAsDouble()));
  }
public static void main(String... args) {
    new Main().run(Integer.valueOf(args[0]),  Integer.valueOf(args[1]));
  }
}



该代码期待两个数字--斐波那契数列中的数字和重复计算目标数字的次数。最后,代码显示了同步和并发计算目标数的平均时间。

该代码没有vars等现代功能,因为它也将由Java 8执行。

在Java中,编译器版本很重要。当用 javac 8 编译的代码在 java 17 上运行时,奇怪的事情发生了。为了尽可能准确,我把相同的代码用Java 8编译器编译成fibonacci8.jar,用Java 17编译成fibonacci17.jar。

使用以下命令启动的 jar 的输出结束:"C:\Program Files\Java\jdk1.8.0_121\bin\java" -jar fibonacci8.jar 40 100

将上述 100 次重复的平均值与使用 启动的 jar 的输出中的平均值进行比较:"C:\Program Files\Java\jdk-17.0.1\bin\java -jar fibonacci17.jar 40 100"

Java 17 在计算任务上似乎慢 (487–444)/444=9% 和 (280–241)/241=16%。这难以置信。让我们尝试另一个数字,45,但只计算了 20 次,因为如您所见,计算需要时间。

现在差异变小了 (5099–4895)/4895=4% 和 (2963–2783)/2783=6%

让我们试试另一个数字,45,但只计算了 5 次。

您再次看到 Java 17 输给了 Java 8:(13981–12854)/12854=8% 和 (7982–6927)/6927=15%

结论

确实需要小心使用最新版本的 Java。在某些用例中,例如计算,现代 Java 可能比几年前发布的 Java 更糟糕。

源码可以从
https://github.com/marianc000/fibonacciJava17vs8下载

如果您运行它并对您的观察发表评论,我将不胜感激。

相关推荐

Origin将普通双Y轴柱状图升级为高级的3D倒影柱状图

双Y轴柱状图可以在同一张图表中展示两组具有不同量纲或数量级的数据。3D倒影柱状图是一种通过三维立体及倒影形式展示多个数据的图表,它通过柱子的高度和颜色来表示不同的数据类别和数值大小,以及通过不同平面展...

Origin 2021 安装教程(附安装包下载)

Origin2021软件介绍广泛用于科研、工程和数据分析领域。它支持多种数据格式,包括Excel、ASCII、CSV等,可以方便地导入和分析各种类型的数据。Origin提供了丰富的数据分析工具,包括...

VIVO origin os系统关闭广告教程(IQOO同理)

以下是我使用期间发现的,如有其他未发现的,欢迎大家评论补充。1设置-安全-更多安全设置-广告与隐私-个性化广告推荐关闭2设置-安全-更多安全设置-应用安装-应用推荐关闭3设置-系统管理-全局搜索-首页...

Origin 2019 安装教程(附安装包下载)

Origin2019软件介绍广泛用于科研、工程和数据分析领域。它支持多种数据格式,包括Excel、ASCII、CSV等,可以方便地导入和分析各种类型的数据。Origin提供了丰富的数据分析工具,包括...

vivo开启Origin OS3系统公测,并且公布首批至第四批可升级名单

vivo在本月初发布了OriginOS3.0操作系统,11月25日开启了首批机型的公测招募活动,首批公测机型包括vivo和iQOO,共计14款机型。首批公测招募的机型有:vivoxfold+、v...

Origin将普通热图升级为高级的3D堆叠热图

3D堆叠热图是一种将多个热图组合在一起展示的图表可视化形式。每个热图代表一个数据集,通过比较不同数据集在不同条件(分组)下的颜色深浅变化来挖掘数据的大小差异或者相关性,能够直观地比较多组数据的相对强度...

最新最详细的Origin2021安装教程(保姆级)

直入正题,下面是Origin2021的安装过程安装包(复制到浏览器打开):%74%2E%63%6E/%41%36%4E%67%6D%54%74%4A安装步骤1、下载得到安装包后,请先解压!一定要先解压...

vivo和iQOO抓紧更新 OriginOS5末班车 12月最后一波升级

进入12月底了,很多老旧机型也已经开始更新各家的新系统了,所以大家一定要注意查看系统版本更新。那么就拿今年国内销量第一的vivo和iQOO来说,OriginOS5都已经推出两个月了,根据之前公布的适...

Origin将普通点线图转换为高级的3D堆叠点线图

点线图用于显示数据随时间或其他连续变量的变化趋势;点线图主要功能是展示数据随时间或连续变量的变化趋势,强调变化幅度,比较多个变量,描述周期性变化,识别异常值,并帮助分析趋势和预测未来趋势。当具有多组数...

蓝厂Origin OS 2.0首批适配机型曝光!有没有你的手机型号?

2020年11月18日蓝厂新系统OriginOS正式发布,并由后来的X60系列首发,新系统发布后网上就有言论:蓝厂补足了最后一块短板!发布至今大概已经有11月的时间了,网上也是褒贬不一,Origin...

Origin2018软件安装包以及安装教程

安装步骤:1.鼠标右击软件压缩包,选择“解压到Origin2018”2.打开“Origin2018\Origin2018”文件夹,鼠标右击“setup”,选择“以管理员身份运行”3.软件正在准备...

Origin这样操作,轻松绘制漂亮的雷达图

背景介绍雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常没有信息。雷达图也称为网络图、蜘蛛图、星图、星图、蜘蛛网、不规则多边形...

曝OriginOS新版本在“玩命打磨底层”流畅性比肩鸿蒙

  日前,vivo正式官宣了2022年vivo开发者大会的举办时间:11月8日-11月9日。OriginOS全新版本届时将正式登场。时隔一年,这次全新OriginOS又将给我们带来什么样的全新体验? ...

Dify工具使用全场景:1.0.1发布了,升级(功能篇·第8期)

上一篇:Dify工具使用全场景:API扩展(功能篇·第7期)一、Dify1.0.1版本升级特性Dify1.0.1版本在稳定性、性能和用户体验方面进行了全面升级,修复了之前版本中的一些已知问题,带来...

vivo 新系统originOS 升级公测后增加手机内存

vivo新系统originOS,通过内存融合、进程优化、应用预载三种技术,一方面调用部分闲置的闪存空间,另一方面低系统对内存的占用,从而可以让原硬件内存增加2-3GB内存使用。vivo新系统ori...