Go的性能不如Java?

作者: freelang | 来源:发表于2018-07-26 22:21 被阅读14次

    Go的性能不如Java?

    image

    引战

    今天在 知乎 上看到了一个关于 GoJava 性能对比的问题,这种问题通常只有一个结局,那就是无休止的争论,十年之后,如果这两个语言还健在的话,这可能依然是热门问题:

    image

    抛开应用场景谈性能都是耍流氓

    目前我主要使用的也是Java和Go,方向是大数据,首先我谈一下我的看法吧:

    • 大部分语言都有它擅长的领域,存在即合理:
      • PHP 擅长构建低成本WEB,也是世界上最好的语言
      • c 擅长操作系统、嵌入式
      • Go 天生高并发属性
      • R 的科学计算、统计无人能及
      • Python 在AI领域独占鳌头
      • Java 工业级应用服务及Android (长期霸占TIOBE榜第一的老流氓)
    • Benchmarks 的测试数据固然能说明一些问题,但这种测试环境和方式还是不够接地气呀,很少有遇到类似的Case不说,实际使用中也不会因为几ms的差距去换语言重构项目。
    • 热点代码 ,这个概念很重要,有些代码片段一个月就命中一次,那就不需要多少极致的优化了。
    • 28法则,把 80% 的精力花在重要的 20% 的代码上吧,人的精力有限,而且世界上还有很多美好的事情,比如写原创文章分享给大家(手动眨眼)。
    • Talk is cheap. Show me the code. 以我的经验来看,目前大部分人的编程水平,还轮不到谈及语言本身的性能,如果你不是,那请加我微信,带我飞吧。

    优缺点总结

    有个朋友回复的内容我觉得非常客观,也比较典型,知乎上抓过来的,侵删。

    JAVA目前的问题并不在于性能,因为JIT自动优化过的代码已经跟C匹敌了。

    JAVA的问题是,真正实际项目里,第三方依赖太多,架构臃肿,过度设计,这时候谁快就不好说了。

    我个人认为,因为go基本上只需要标准库就足够了,实际工程中的性能表现要好于JAVA(Go的协程本质也是一种异步IO模型,Go语言: 万物皆异步),除此之外,资源占用也是性能的一部分,显然go内存占用更小,CPU消耗相对低。

    benchmark game上go在大多数场景下都是跑的比Java快的,而且内存消耗是java的1/3;

    来列一下Go的不足吧:

    1. 有点反程序员的语法
    2. 没有泛型
    3. 标准库中数据结构远不如Java丰富
    4. 依赖管理鸡肋
    5. channel如果使用不当,非常容易死锁
    6. 编译时不允许循环import
    7. 编码时很多包名会跟自定义的变量名冲突
    8. Java中很多认为理所当然的库,在Go中发现要重新造轮子
    9. go get命令会clone整个git仓库,包括历史commit
    10. 标准库不提供routine池
    11. 没有现成的Future机制 ,要自己通过channel实现

    暂时就想到这些;当然所有这些都是可以解决的

    Java的不足:

    1. 语言表达能力比较欠缺(接地气的说法叫“又臭又长”)
    2. 内存、CPU消耗大
    3. 堆内存较大时,垃圾回收器需要进行深入调优才能得到满意的回收效果; 然而在一些对实时性要求高的场景下,gc可能直接就是无解, full gc一触发就是地狱
    4. 程序需要预热
    5. JDK体积庞大, springboot jar包体积大(在微服务架构下问题最突出)
    6. Spring全家桶越来越重(Spring你做好IoC AOP就够了),导致使用全家桶的应用,性能较差(可参考TechEmpower Round 14中spring的位置),但也是足够用的
    7. 因为成熟的框架、库太多,导致很多人入门时被带偏,以为编程就是调API,用框架,而对于原理知之甚少

    暂时就想到这些; 当然,Java的优点远远超过这些不足,否则就不会常年盘踞TIOBE编程语言排行榜第一名了

    相关文章

      网友评论

      • 05bd09920618:这么多语言,怎么没有.net core 的c#
      • e9a44a336dfe:java运行时的库依赖太重,是最头疼的!
        freelang:@煜_ 嗯 有时候只是用了一个很小的功能,却可能引入了十几个包

      本文标题:Go的性能不如Java?

      本文链接:https://www.haomeiwen.com/subject/bdpimftx.html