1关于性能问题
现在的jvm的确速度已经很快了,但是也要分情况来看,jvm从整体设计上说还是属于解释字节码执行,速度提升来自于jit,对于基础运算,比如一堆int计算,普通的数组访问什么的,是可以接近C++的一般实现的,大致在一个数量级,慢一半或一半不到把,因为这些很容易编译为对应的机器码,跟C++编译器差距不大;但是在其他方面,jit的优化能力可能并不是那么强了;而且由于语言设计的问题,优化空间都可能非常小,比如java在效率方面被诟病的泛型,VectorInteger和C++的vectorint可不是差一点半点,因Integer是一个实打实的对象,不过我不清楚有没有jvm版本对这个问题做了优化,感觉可能性不大,相对的C#则用二次编译基本解决了这个问题当然反过来说,像上面一些回答说的,鹅厂内部一些业务代码是写的比较烂,但是用C++,我们就存在优化它的可能,尽管可能现阶段没能力,没时间做或根本就没注意到,而用了java,则优化空间可能受限,打个比方,C++写代码一开始可能是60分,但总能优化到90多分,java虽然一开始随便弄到70分,但是一般的优化也就80多撑死,除非像阿里一样改jvm,但并不是鹅厂的选择2并发、安全、开发效率、中间件、开源库这些
并发无关语言,甚至由于jvm没有协程(或者有这类jvm,不过标准版很少用),C++还更方便,所以就内部后台技术讨论到这点时,golang的呼声都比java大安全和开发效率,如果能力不是太差,其实也还好,这方面也有很多其他的保障,比如你说C++程序跑起来容易core,那么我们从设计上就考虑了,core一两个进程不影响运行就好啦,你用QQ觉得还很流畅的,其实说不定后台程序core了多次,这就是从架构上解决问题,弥补语言的缺陷了,当然,这个缺陷也是比较严重的,架构不能解决所有问题中间件和开源库,开源这东西其实不是那么好用,内部很多是自研的,或者在开源基础改,比如我现在做腾讯云的Redis,就改了好多,因为很多需求不支持,越改越搓火,改到我们都开始设计重构方案了,重做个Redis3语言转方向问题C++转java还算容易,反过来要难些,语言是工具,但转换语言并不如很多人想象得那么简单,有时候,你就是从一个坑跳到另一个坑,C++转java是不用自己释放内存了,可gc造成的一些问题呢,学习成本也不见得低,完美转身是很难的
4为啥不招java程序员内部java岗位是有的,C++岗位不招java也无可厚非了,毕竟C++的程序员也不难找
再说说个人看法吧,作为一个在鹅厂也用了多年C++的,个人感觉转个语言也挺好,但是关键要解决几个问题:1学习成本问题,现在大家用了这么多年C++,突然提出换,即便是一个很小的团队也要学习成本,如何降低这个成本是关键2号召力问题,换成功了,要带动大家一起换,比如一个小组搞定,要带动部门来做,就得拿出点真正的优势来吸引别人3现有库的整合问题,现在C++已经积累了这么多库,不能说一换语言,迁移成本很高,更不能说就这样全丢了
4效率问题,最好能做到效率高,并且是能开放式的,比如你引入了java,如果能给出一个方案,逐步向C++靠近(比如说按class改造为jni什么的),保证过程的平稳可控,那也行,但是这个在很多语言上有些困难,拿java来说,写jni还是挺有难度的还可能有一些其他问题
最后,其实这方面已经在有一些实践了,比如我们有的管理服务进程也用到python,一些折中方案也在考虑中,比如像facebook做hack语言一样,只是方案开发优先级没那么搞,搞起来没那么快罢了,搞出来了也有一个局部到整体的应用过程