java和go_为什么 Go 语言在某些方面的性能还不如 Java?

有朋友说抛开应用场景谈性能都是耍流氓,我的应用场景都还是挺典型的,就是普通的后端微服务实现,cpu和io的密度比较平衡,有的可能IO略重一些,有的cpu略重一些。

我实际用下来的体会是,Java(其实主要是scala)和Go在后端服务应用的性能是差不多的,延时的差别几乎可以忽略不计。反正我是感觉不出来。当然,我也没闲的那么蛋疼做过完全一样的Java 和Go的服务来比较,我只能大致的感觉。

还有说go内存高效的,这个要具体看,不能那么武断,jvm的内存使用也是很高效的。有人说java的各种框架一装入就占多少内存,你真的细看过吗?这些内存都是被用在哪里?对于后端服务来说,heap中主要还是为每个请求所创建的对象为主。一段时间内(我们可以想象为GC的周期,其实并不完全等同),请求越多,占用的内存就越多。

题主说JIT应该比静态编译运行速度慢,这还真不是。要这么看, JIT也是会把很多代码(不一定是全部)编译成机器代码的,一旦JIT编译完成,这个执行速度就和静态编译的效果差不多了,甚至可能更快,因为go还不能算是一个充分优化的编译器。

JIT的编译代价尽管还挺大的,但是它是一次性的,而且即时编译并不是在class装入时一次性做完的。所以你要写个小算法,它还真未必能把jit给调动起来,或者调动起来总cpu时间也还是挺高的。但是对于后端服务来说,是常用方法的高频反复调用,JIT的效果还是非常明显的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值