当前位置: 技术问答>java相关
想不通,就是想不通!
来源: 互联网 发布时间:2015-03-22
本文导语: 刚开始学JAVA,看到书上对JAVA的评价都非常高,其主要的特点就是跨平台。 很多书上介绍JAVA历史时都说起始是用来做为智能电气(比如烤面包的东东)的,但C++之类的语言在跨平台上代价太大——C++是编译型语言,...
刚开始学JAVA,看到书上对JAVA的评价都非常高,其主要的特点就是跨平台。
很多书上介绍JAVA历史时都说起始是用来做为智能电气(比如烤面包的东东)的,但C++之类的语言在跨平台上代价太大——C++是编译型语言,每个平台上都要有相应的编译器云云,而Java则可以一次开发到处运行,因为它是解释型的。
我就想不通了,各个平台上的JVM是怎么开发出来的,难道也是用JAVA?如果每个平台上的JVM是用C++之类的语言开发的,那么该平台上必然有C++的编译器存在,那么该平台上的应用不就可以用C++开发吗?
很多书上介绍JAVA历史时都说起始是用来做为智能电气(比如烤面包的东东)的,但C++之类的语言在跨平台上代价太大——C++是编译型语言,每个平台上都要有相应的编译器云云,而Java则可以一次开发到处运行,因为它是解释型的。
我就想不通了,各个平台上的JVM是怎么开发出来的,难道也是用JAVA?如果每个平台上的JVM是用C++之类的语言开发的,那么该平台上必然有C++的编译器存在,那么该平台上的应用不就可以用C++开发吗?
|
我觉得应该把JVM理解成一个中间层,你的Java字节码由JVM进行解释,JVM在各个平台的实现各不相同,但字节码经过JVM解释的结果确是相同的,JVM有点类似于翻译的意思。
但C++则不同了,C++没有中间层,直接生成本地代码,显然不能跨平台。
但C++则不同了,C++没有中间层,直接生成本地代码,显然不能跨平台。
|
同意楼上观点。我个人认为原因之一是工程实现/现状问题,即对于“跨平台”的支持程度不同。
如果在各个OS上的C++编译器的“统一性”很好,对C++源码的支持性可以达到目前
各种JVM对Java源代码/字节码的支持水平,那么确实Java的优势就要降低了,但问题
不是这样,从工程实施的现状来看,目前各个OS上的C++编译器的“统一性”不是
非常好。Java是后来出现的,一开始就把这个问题当作最主要的目的之一,宁可
放弃一部分“平台特定优势”也要争取做到“跨平台通用”,所以自然在“统一性”
方面就要比C++好一些。但是依然存在一些问题,比如不同JVM对于多线程/变量可视性
的支持水平不同,造成这一类的代码在不同JVM上运行的性能不同(甚至是结果不同)。
但总的来说,Java的“跨平台通用性”要比C++好。
基于同样的理由,C++的性能(特别是平台特定性能优化)要比Java好。
其实,把Java和C++类比是不太确切的。Java不光是语言/类库,Java还包括JVM。
所以打一个比方简单来说,Java = (C++) + OS;当然目前的JVM的功能/性能
还远远比不上一个真正的OS。但是事物是发展的嘛,嘻嘻 IP一开始也是有很多问题,
但是IP就是牢牢抓住“互联/跨底层网络”这一点,经过长期努力,再加上机遇(如WEB
的广泛应用等),最终IP得以大范围使用。
如果在各个OS上的C++编译器的“统一性”很好,对C++源码的支持性可以达到目前
各种JVM对Java源代码/字节码的支持水平,那么确实Java的优势就要降低了,但问题
不是这样,从工程实施的现状来看,目前各个OS上的C++编译器的“统一性”不是
非常好。Java是后来出现的,一开始就把这个问题当作最主要的目的之一,宁可
放弃一部分“平台特定优势”也要争取做到“跨平台通用”,所以自然在“统一性”
方面就要比C++好一些。但是依然存在一些问题,比如不同JVM对于多线程/变量可视性
的支持水平不同,造成这一类的代码在不同JVM上运行的性能不同(甚至是结果不同)。
但总的来说,Java的“跨平台通用性”要比C++好。
基于同样的理由,C++的性能(特别是平台特定性能优化)要比Java好。
其实,把Java和C++类比是不太确切的。Java不光是语言/类库,Java还包括JVM。
所以打一个比方简单来说,Java = (C++) + OS;当然目前的JVM的功能/性能
还远远比不上一个真正的OS。但是事物是发展的嘛,嘻嘻 IP一开始也是有很多问题,
但是IP就是牢牢抓住“互联/跨底层网络”这一点,经过长期努力,再加上机遇(如WEB
的广泛应用等),最终IP得以大范围使用。