资讯专栏INFORMATION COLUMN

Julia和Java性能比较

chengjianhua / 1049人阅读

摘要:介绍性能号称可以赶得上,我很好奇的执行速度,因为我一直用的是,所以就想把和做一下简单的比较。总结从上面的比较来看,确实比快很多,不过这里只做了简单的比较,并没有做严谨的测试,仅供参考。

1、介绍

Julia性能号称可以赶得上c/c++,我很好奇Julia的执行速度,因为我一直用的是Java,所以就想把Julia和Java做一下简单的比较。
这次比较一下Julia和Java做一亿次加法运算的速度。

2、Julia不做优化和Java比较

首先我写的Julia代码没做优化,我们看一下Julia的代码执行:

x=0
@time for i in 1:10^8
    global x+=i
end

这是三次执行的结果:大约6s的时间

  6.550459 seconds (200.00 M allocations: 2.980 GiB, 18.45% gc time)
  6.565272 seconds (200.00 M allocations: 2.980 GiB, 18.15% gc time)
  6.382583 seconds (200.00 M allocations: 2.980 GiB, 18.37% gc time)

再看Java代码和执行结果:

 public class Test1 {
    public static void main(String[] args) {
            long t1=System.currentTimeMillis();
            long x=0;
            for(int i = 1; i<=100000000; i++)
                x+=i;
            long t2=System.currentTimeMillis();
            System.out.println("x="+x+", duration="+(t2-t1));
        }
}

三次执行结果:大约40ms

x=5000000050000000, duration=41
x=5000000050000000, duration=40
x=5000000050000000, duration=40

从上面的执行结果看,Java明显比Julia快很多,相差一百多倍的时间,但是这是Julia没有优化的代码,下面我们看一下Julia优化后的情况

3、Julia优化后与Java比较

我们去掉全局变量,把代码放到函数里面,然后调用函数,代码如下,:

function sumfor()
    x=0
    for i in 1:10^8
        x+=i
    end
    x
end
@time sumfor()
@time sumfor()

下面是三次执行的结果,由于Julia第一次执行会做预编译的操作,我们调用两次方法并以第二次结果为准,
第二次执行只用了0.002ms的时间,比Java快了很多。

0.080203 seconds (35.91 k allocations: 1.978 MiB)
0.000003 seconds (5 allocations: 176 bytes)
0.062682 seconds (35.91 k allocations: 1.978 MiB, 46.11% gc time)
0.000002 seconds (5 allocations: 176 bytes)
0.037539 seconds (35.91 k allocations: 1.978 MiB)
0.000002 seconds (5 allocations: 176 bytes)

总结: 从上面的比较来看,Julia确实比Java快很多,不过这里只做了简单的比较,并没有做严谨的测试,仅供参考。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77123.html

相关文章

  • 让代码飞起来——高性能Julia学习笔记(二)

    摘要:首发于接上一篇让代码飞起来高性能学习笔记一,继续整理高性能学习笔记。和都只能表示特定的整数范围,超过范围会。通用代码一般会用,这就有可能导致性能问题。 首发于 https://magicly.me/hpc-julia-2/ 接上一篇:让代码飞起来——高性能 Julia 学习笔记(一), 继续整理高性能 Julia 学习笔记。 数字 Julia 中 Number 的 size 就跟 C ...

    noONE 评论0 收藏0
  • 让代码飞起来——高性能Julia学习笔记(三)

    摘要:前面两篇让代码飞起来高性能学习笔记一让代码飞起来高性能学习笔记二,介绍了如何写出高性能的代码,这篇结合我最近的项目,简单测试对比一下各种语言用算法计算的效率。下一篇,我们就来看一下中如何利用并行进一步提高效率。 前面两篇让代码飞起来——高性能 Julia 学习笔记(一) 让代码飞起来——高性能 Julia 学习笔记(二), 介绍了如何写出高性能的 Julia 代码, 这篇结合我最近的项...

    edgardeng 评论0 收藏0
  • 这5款Python Web APP开发工具,最中意哪一款?

    摘要:本文汇总了中数款仪表盘工具,简单比较其使用场景学习难度,挑选趁手的来玩即可。进一步学习谁是中最强开发工具谁是中最强开发工具 仪表盘 (Dashboard),可简单的理解为一个交互式网页,在其中,用户可以不懂代码,拖拖拽拽即可与数据交互、做数据探索建模分析、展示自己关注的结果。 ...

    Jingbin_ 评论0 收藏0
  • MongoDB 资源、库、工具、应用程序精选列表中文版

    摘要:推荐阅读资源库工具应用程序精选列表中文版有哪些鲜为人知,但是很有意思的网站一份攻城狮笔记每天搜集上优秀的项目一些有趣的民间故事超好用的谷歌浏览器油猴插件合集目录资源文档文章图书会谈教程更多库工具管理数据部署桌面发展监控应用资源文档介绍文档教 推荐阅读 MongoDB 资源、库、工具、应用程序精选列表中文版 有哪些鲜为人知,但是很有意思的网站? 一份攻城狮笔记 每天搜集 Github ...

    e10101 评论0 收藏0
  • JavaScript原型

    摘要:而这个原型对象作为这个构造函数的一个属性,是被其创建出来的所有实例共享的。 构造函数创建对象带来的问题 上一篇文章介绍了JavaScript创建对象的几种方法,都有各自的优缺点。构造函数看起来好像很好,但是它也有一个问题,那就是创建出来的每一个实例对象的方法都是一个独立的函数,即使他们的内容是完全相同的,这是不符合函数的代码复用原则的,而且也不能够统一的修改已被创建的实例的方法。 ...

    afishhhhh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<