今天在知乎上看到了一个关于 <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Go</span>
和 <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Java</span>
性能对比的问题,这种问题通常只有一个结局,那就是无休止的争论,十年之后,如果这两个语言还健在的话,这可能依然是热门问题:
目前我主要使用的也是Java和Go,方向是大数据,首先我谈一下我的看法吧:
大部分语言都有它擅长的领域,存在即合理:
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">PHP<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">PHP</span>
擅长构建低成本WEB,也是世界上最好的语言
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">c<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">c</span>
擅长操作系统、嵌入式
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Go<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Go</span>
天生高并发属性
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">R<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">R</span>
的科学计算、统计无人能及
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Python</span>
在AI领域独占鳌头
<span style="box-sizing: border-box;background-image:初始;背景位置:初始;背景大小:初始;背景重复:初始;背景附件:初始;背景来源:初始;背景剪辑:初始;显示:内联块;填充右:2px; padding-left: 2px;line-height: 22px;font-size: 15px;">Java<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Java</span>
工业级应用服务及Android(长期霸占TIOBE榜第一的老流氓)
<span style="color: rgb(74, 74, 74);框大小: border-box;背景图像: 初始;背景-位置:初始;背景大小:初始;背景重复:初始;背景附件:初始;背景原点:初始;背景剪辑:初始;显示:内联块;右内边距:2px;左内边距: 2px;line-height: 22px;">Benchmarks<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="color: rgb(74, 74, 74);box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">Benchmarks</span>
的一些测试数据固然能说明问题,但这种测试环境和方式还是不够接地气呀,很少遇到类似的案例不说,实际使用中也不会几毫秒的间隙去换语言重构项目。
<span style="color: rgb(74, 74, 74) );字体大小:16px;框大小:边框框;背景图像:初始;背景位置:初始;背景大小:初始;背景重复:初始;背景附件:初始;背景原点: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">热点代码<span style="box-sizing: border-box;color: rgb(74, 74, 74);line-height: 22px;font-size: 16px;"></span></span>
,这个概念很重要,有些代码片段一个月就命中一次,那就不需要多少最大限度的优化了。<span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">热点代码</span>
<span style="color: rgb(74, 74, 74) ;字体大小:16px;框大小:边框框;背景图像:初始;背景位置:初始;背景大小:初始;背景重复:初始;背景附件:初始;背景原点:初始;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">28<span style="box-sizing: border-box;color: rgb(74, 74, 74);line-height: 22px;font-size: 16px;"></span></span>
法则,把80%的精力花在重要的20%的代码吧,人的精力有限,世界上还有很多美好的事情,比如写原创文章分享给大家(手动眨眼)。<span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">28</span>
<span style="颜色:rgb(74, 74, 74);字体大小:16px;框大小:边框框;背景图像:初始;背景位置:初始;背景大小:初始;背景重复:初始;背景附件:初始;背景原点:初始;背景剪辑:初始;显示:内联块;右内边距:2px;左内边距:2px;行高:22px;” >Talkischeap.Showme the code.<span style=" box-sizing: border-box rgb></span>
以我的经验来看,目前大部分人的编程水平,还轮不到谈及语言本身的性能,如果不是,那请加我微信,带我飞吧。<span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">Talkischeap.Showme the code.</span>
JAVA目前的问题并不在于性能,因为JIT自动优化过的代码已经跟C匹敌了。
JAVA的问题是,真正实际项目里,第三方依赖太多,架构臃肿,过度设计,这时候谁快就不好说了。
我个人认为,因为go基本上只需要标准库就足够了,实际工程中的性能表现要好于JAVA(Go的协程本质也是一种异步IO模型,Go语言: 万物皆异步),除此之外,资源占用也是性能的一部分,显然go内存占用更小,CPU消耗相对低。
benchmark game上go在大多数场景下都是跑的比Java快的,而且内存消耗是java的1/3;
来列一下Go的不足吧:
有点反程序员的语法
没有泛型
标准库中数据结构远不如Java丰富
依赖管理鸡肋
channel如果使用不当,非常容易死锁
编译时不允许循环import
编码时很多包名会跟自定义的变量名冲突
Java中很多认为理所当然的库,在Go中发现要重新造轮子
go get命令会clone整个git仓库,包括历史commit
标准库不提供routine池
没有现成的Future机制 ,要自己通过channel实现
暂时就想到这些;当然所有这些都是可以解决的
Java的不足:
语言表达能力比较欠缺(接地气的说法叫“又臭又长”)
内存、CPU消耗大
堆内存较大时,垃圾回收器需要进行深入调优才能得到满意的回收效果; 然而在一些对实时性要求高的场景下,gc可能直接就是无解, full gc一触发就是地狱
程序需要预热
JDK体积庞大, springboot jar包体积大(在微服务架构下问题最突出)
Spring全家桶越来越重(Spring你做好IoC AOP就够了),导致使用全家桶的应用,性能较差(可参考TechEmpower Round 14中spring的位置),但也是足够用的
因为成熟的框架、库太多,导致很多人入门时被带偏,以为编程就是调API,用框架,而对于原理知之甚少
暂时就想到这些; 当然,Java的优点远远超过这些不足,否则就不会常年盘踞TIOBE编程语言排行榜第一名了
以上是Go的性能不如Java?的详细内容。更多信息请关注PHP中文网其他相关文章!