Java价值 [转载]
JAVA本来说是为企业应用而生的.
真正的企业应用,是那种大规模客户的应用.拿桌面语言和企业应用相比,不能说叫浅薄,至少说是幼稚的.就象说地铁没有自行车快.是的,当钻小巷时地铁是不能钻.
我下面的观点,绝对不是哪个网站上流行的,也是目前为止还没有人提出来的.是我自己的认识,我先说在这儿.因为我绝对不会在A网上看到一种新观点就跑B网上来发表,不管自己懂没懂.
一二年以后.客户端系统也将往虚拟机系统中转移而实时系统的代码将慢慢消失.理由如下:
1.当然是移植性问题,随着科学技术的发展,硬件成本将越来越低至忽略,软件成本(即人脑的劳动)将越来越高,相同功能的软件应该写一次就能在不同设备上运行以降低人脑成本,这是发展的最终趋势.
2.如同DOS的基本内存无法突破640K限制一样,X86架构的CPU的主频极限是4G,现在3.66G的主频已经接近极限,那么下一步(其实现在已经开始了),超线程技术CPU将成为主流,所以多线程并发编程技术是下一代编程的核心,不懂这个技术你只有回家抱孩子.而这正是虚拟系统的强项.
3.在服务性功能上,如webserver,application server(也就是商业应用的核心),虚拟系统将比实时系统性能更高.
以前我说这句话,C/C++程序员会笑得牙都掉了.中间语言怎么能比二进制执行码性能更高?2001年我说这句话时,我们公司的技术总监对我说:如果面试时你说这句话,我连招都不会招你.国内顶级C程序员,和象张小龙先生这一类大牛级的程序员hotdog先生,当时是我们的技术顾问,因为我说了这句话,他对我嗤之以鼻.
今天,java技术/.NET技术终于成为主流而替代C/C++写的CGI的时候,他们已经接收了我的观点,当时我的理由是因为线程池机制,压缩堆技术等而提高了性能.
现在我再加一条理由,即使不采用线程池,虚拟系统的中间代码(bytecode/IL)在循环执行(服务类功能)时也会比实时系统快!
虚拟系统的中间语言慢是慢在启动阶段,也就是说从你开始让他执行到它真的执行这一段,因为它要把中间语言编译成可执行码.所以要慢编译的这段时间.以前的解释编译器要把整个文件编译一次.现在的JIT编译器已经不需要这么做,它只编译要执行的那一段,比如一个类中有20个方法,其中19个这次没有用到,那么将只编译用来的那一个方法,并保存在内存中,下次调用就不需要编译了.这样速度已经有了很大的提高.
但无论如何它还是要编译一些中间语言的,为什么会比执行码更快呢?我说的是循环执行,比如C的2进制码执行一个功能要10分钟,那它就是10分钟.而中间语言要加上编译的1分钟,那么要11分钟.假如是循环执行,编译的时候相对执行的时候可以忽略.但他还是不会快啊.
其实这正是虚拟系统的好处,因为从中间语言编译成执行码是在当前系统中编译的,JIT编译器能针对当前CPU做即时优化,也就是说同样的中间语言在不同的机器上能编译出不同的二进制码,使性能得达到最优.而实时系统的二进制码是在发布的时候就已经编译好,它不可能知道将要在什么CPU上运行,即使优化,也是"通用的优化",无法发挥每个具体的CPU的最佳性能.
不知不觉说了不少.愿那些真正的代码人能有所体会.如果你不是只想做一个FANS,弄懂最底层的技术吧.
---
axman 发表于 cnjbb.org 05-03-06
---
其实这是一篇回复人家的文章,不知道应该取什么名字,不过一个合格的程序员应该就像axman一样,赚钱不一定不完全对,让自己的才能产生价值才是对的!
真正的企业应用,是那种大规模客户的应用.拿桌面语言和企业应用相比,不能说叫浅薄,至少说是幼稚的.就象说地铁没有自行车快.是的,当钻小巷时地铁是不能钻.
我下面的观点,绝对不是哪个网站上流行的,也是目前为止还没有人提出来的.是我自己的认识,我先说在这儿.因为我绝对不会在A网上看到一种新观点就跑B网上来发表,不管自己懂没懂.
一二年以后.客户端系统也将往虚拟机系统中转移而实时系统的代码将慢慢消失.理由如下:
1.当然是移植性问题,随着科学技术的发展,硬件成本将越来越低至忽略,软件成本(即人脑的劳动)将越来越高,相同功能的软件应该写一次就能在不同设备上运行以降低人脑成本,这是发展的最终趋势.
2.如同DOS的基本内存无法突破640K限制一样,X86架构的CPU的主频极限是4G,现在3.66G的主频已经接近极限,那么下一步(其实现在已经开始了),超线程技术CPU将成为主流,所以多线程并发编程技术是下一代编程的核心,不懂这个技术你只有回家抱孩子.而这正是虚拟系统的强项.
3.在服务性功能上,如webserver,application server(也就是商业应用的核心),虚拟系统将比实时系统性能更高.
以前我说这句话,C/C++程序员会笑得牙都掉了.中间语言怎么能比二进制执行码性能更高?2001年我说这句话时,我们公司的技术总监对我说:如果面试时你说这句话,我连招都不会招你.国内顶级C程序员,和象张小龙先生这一类大牛级的程序员hotdog先生,当时是我们的技术顾问,因为我说了这句话,他对我嗤之以鼻.
今天,java技术/.NET技术终于成为主流而替代C/C++写的CGI的时候,他们已经接收了我的观点,当时我的理由是因为线程池机制,压缩堆技术等而提高了性能.
现在我再加一条理由,即使不采用线程池,虚拟系统的中间代码(bytecode/IL)在循环执行(服务类功能)时也会比实时系统快!
虚拟系统的中间语言慢是慢在启动阶段,也就是说从你开始让他执行到它真的执行这一段,因为它要把中间语言编译成可执行码.所以要慢编译的这段时间.以前的解释编译器要把整个文件编译一次.现在的JIT编译器已经不需要这么做,它只编译要执行的那一段,比如一个类中有20个方法,其中19个这次没有用到,那么将只编译用来的那一个方法,并保存在内存中,下次调用就不需要编译了.这样速度已经有了很大的提高.
但无论如何它还是要编译一些中间语言的,为什么会比执行码更快呢?我说的是循环执行,比如C的2进制码执行一个功能要10分钟,那它就是10分钟.而中间语言要加上编译的1分钟,那么要11分钟.假如是循环执行,编译的时候相对执行的时候可以忽略.但他还是不会快啊.
其实这正是虚拟系统的好处,因为从中间语言编译成执行码是在当前系统中编译的,JIT编译器能针对当前CPU做即时优化,也就是说同样的中间语言在不同的机器上能编译出不同的二进制码,使性能得达到最优.而实时系统的二进制码是在发布的时候就已经编译好,它不可能知道将要在什么CPU上运行,即使优化,也是"通用的优化",无法发挥每个具体的CPU的最佳性能.
不知不觉说了不少.愿那些真正的代码人能有所体会.如果你不是只想做一个FANS,弄懂最底层的技术吧.
---
axman 发表于 cnjbb.org 05-03-06
---
其实这是一篇回复人家的文章,不知道应该取什么名字,不过一个合格的程序员应该就像axman一样,赚钱不一定不完全对,让自己的才能产生价值才是对的!
meiking
2005-03-11 16:41:50
评论:0
阅读:726
引用:0
