百科问答小站 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# 并排跑的,考虑到应用场景这并不奇怪。




  

相关话题

  如何看待今日头条自媒体发布谣言称「支付宝几乎秒开是因为采用华为方舟编译器」? 
  Golang 的 goroutine 是如何实现的? 
  如何评价 Golang 1.5 更新? 
  如何评价 Golang 1.5 更新? 
  为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? 
  大部分语言都用尖括号<>表示泛型,为什么golang要标新立异用中括号? 
  为什么Go语言能比Erlang还流行? 
  Go、Rust、Nim等新兴语言,为什么都抛弃了constructor? 
  为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? 
  Golang、Kotlin、C#、JS、Python等都有协程,市面上的协程有什么本质上的区别? 

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





© 2024-12-23 - tinynew.org. All Rights Reserved.
© 2024-12-23 - tinynew.org. 保留所有权利