百科问答小站 logo
百科问答小站 font logo



为什么 Go 语言在某些方面的性能还不如 Java? 第1页

  

user avatar   liu-zhao-yun 网友的相关建议: 
      

查看了 binarytrees 这部分的代码,分析一下为什么 Go 会明显的比其它语言比如C/C++/Java/C# 慢了很多,前者基本10秒以内,而 Go 版本要 30s~40s。首先要排除 C/C++ 版本,这两个版本作弊了——提前申请了内存池。不过自定义内存申请在C/C++上也是常见的动作所以也不能说不可以。为什么 Java/C# 也会比 Go 快呢?这是垃圾回收策略导致的,Golang 默认一种垃圾回收策略,走的是高频次低延迟的路线,而默认Java/C#是高吞吐量高延迟的,所以这点非常不利于Go的性能表现。如果是游戏的话,用java实现会出现周期性的卡顿现象,如果是 Go 的话就不会有这种现象,这是高频低延的好处。另外这个案例也切中了Java/C#的分代垃圾回收算法,大量的小内存在复制回收算法中是非常快的。不过Go可以做的更快 —— 实现定义的内存池,这样的话它的速度应该可以接近C/C++的实现,事实上有人提交过这样的代码被拒了,这种思路在 Java 上是无法实现的因为Java的内存分布是JVM控制的无法自定义内存,用C#的struct应该也可以达到类似的效果。从语言对内存管理的天然亲昵性来看:C/C++ > Go > C# > Java 的,这个特性其实决定了已经优化过执行策略的语言的性能上限,这是因为现在的CPU瓶颈往往在于内存加载使用连续分布的内存才能实现更快的应用。

我们在做游戏引擎的时候(基于Golang)也大量使用了类似的思路来管理内存速度极快。有兴趣的同学可以看下:KorokEngine/Korok 。个人觉得,Go 是可以上达 C/C++ 下也可以跟 Java/C# 并排跑的,考虑到应用场景这并不奇怪。




  

相关话题

  为什么Go语言能比Erlang还流行? 
  Python和Go语言都这么火,你们觉得哪个前景更好? 
  Go、Rust、Nim等新兴语言,为什么都抛弃了constructor? 
  公司规定所有接口都用 post 请求,这是为什么? 
  个人独立开发游戏(已决心入坑,求教育)都有哪些需要提前规避的? 
  Go语言中如何检测一个channel已经被关闭了? 
  Go、Rust、Nim等新兴语言,为什么都抛弃了constructor? 
  vlang,nim等新兴语言未来是否有可能掀翻go,rust,Python等老牌热门语言的霸主地位? 
  golang如何令程序在go关键字修饰的方法(函数) 执行完成后 再结束? 
  如果你要放弃Golang,你的理由是什么? 

前一个讨论
在5G的运用上,世界上多数ICT公司都没有选择矿山为突破口,而华为把矿山作为切入点,如何看待这一选择?
下一个讨论
如何评价 C++ 11 auto 关键字?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利