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




  

相关话题

  Python和Go语言都这么火,你们觉得哪个前景更好? 
  为什么依赖注入只在 Java 技术栈中流行,在 go 和 cpp 没有大量使用? 
  Python 在大部分领域都能胜任,为什么很多企业转向了 Golang? 
  golang select 模式 在C#中如何实现? 
  Go语言中如何检测一个channel已经被关闭了? 
  为什么要使用 Go 语言?Go 语言的优势在哪里? 
  为什么 Go 语言在某些方面的性能还不如 Java? 
  这样一段代码在软件工程界属于什么水平? 
  网上说 Java 的性能已经达到甚至超过 C++,是真的吗? 
  为什么 Go 语言在某些方面的性能还不如 Java? 

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





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