网上有很多文章通过分析来说明Java的性能优化的好的话是不输C++的,还有一些是通过一些实际的代码测试来说明,不过在一些测试中明显是作弊了
本文不打算用长篇大论来论述,只是简单的说明一些真相
为什么很少有人怀疑C/C++ 的效率,为什么被怀疑的总是Java,为什么怀疑Python,PHP等脚本的人也不多?
Java不会做人,所为做人留一线,见后好xx。Java总是想要自己很完美,任何领域都想插一脚,做为一个完美的语言,性能上怎么能落后呢,这多没面子,于是发生了可笑的事情,总是想证明在性能上跟C/C++在一个级别上,而且每个个版本更新都会说性能有了很大的提升,提升了这么多年,结果呢?只能用一些作弊方式哄骗一些不明真想的围观群众
GC是Java性能的主要问题
其实真相应该是反过来的,不是GC影响了Java的性能,而是Java败坏了GC的名声,GC和malloc/free 都是动态内存管理的方法,申请内存的操作基本上是一样,不同的是选择释放的时机问题,通常GC的释放动作自动触发的,但实现上并没有禁止手动触发,只是一些语言拒绝这么做,全自动的内存管理一定做不到最优,全手动的可以有机会做到最优,很多时候半自动才是更好的选择。这里并不想详细讨论GC的实现,只是想客观的指出应该正确的认识GC,更多关于GC的内容请参考:http://www.iecc.com/gclist/GC-faq.html
JIT就可以达到和C/C++一样的速度
只能说JIT可以提高Java的速度,但不表示JIT就可以达到和C/C++一样的速度,理由很简单,编译型的语言也不是只有C/C++,都没有说能达到C/C++的速度,实际上这是鱼与熊掌不能兼得的问题,对于C语言的效率是在第一位的,为了效率可以放弃很多高级特性,而其它语言则是为了特性可以损失性能,这才是根本问题
Java的流行度证明Java语言足够好
语言流行的原因很多,实际情况是语言是不是足够好并不是影响流行度最大的原因,而是商业公司的支持,利益驱动下的结果,所以流行度不是评价语言好坏的标准,而是一个参考值
一次编译到处运行是Java最大的有点
那对于脚本来说,一次编写就到处运行又怎么说,而且没有哪个脚本会说这是它的优势,为什么Java却能把这个拿出来说事儿呢,而很多人的实际情况是一次编写到处调试
Java继承C++的优点,也抛弃了C++的一些弊端
我只能说C++最大的优点是有着仅次于C语言的性能,有着C一样的平台操控能力,几乎无缝的兼容C(这点有争议,其实这也是C++的历史包袱),这才是C++的竞争力所在,Java一点都没继承到,只是在语言特性上做了些文章,论这个,Python,Ruby等语言可能更让人认可
Java是简单的
这是Java问世以来就有的一句话,而且还经常被一些书引用,只能说Java比C++简单,但是不表示比C++简单就叫简单,因为还没有哪个语言说比C++还难
暂时写这么多,还有哪些希望大家补充
最后:Java总是喜欢和C++比,其实没有可比性,从语法上,能认可C++的语法设计好的人不多,从这点上跟C++比语法不能证明语法设计好。领域不同,C++是系统编程语言,C/C++是技术与性能的代名词(性能本来就是它的重要的目标之一,而C/C++使用者被要求必须了解平台相关的技术才能很好的使用),而Java是应用层语言,是理想主意的代名词(硬件可以提升性能,平台技术无需深入了解,理论上jvm可以提供一切,java什么都能做)