注册本站  论坛  繁體中文

慧民电脑芯片级维修-电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 核心技术 >> Jvm技术 >> Java正文

正确认识java JVM与c/c++的执行效率

文章来源:中国IT实验室整理 作者:佚名 更新时间:2008-9-21 17:05:12 【 】 【加入收藏

     认为Java不能写JVM是完全错误的。JNode是一个用Java写的开源操作系统,他里面的JVM就是用Java写的。这个操作系统现在有几十兆,其中   99%的代码是用java编写,其中只有一个极小的“操作系统引导程序”是用汇编写的,我们暂时称之为booter.exe,大小为几KB。
booter.exe的作用就是将用java写的JVM编译并装入内存,简单的说就是将JVM.class编译成JVM.exe(JVM.exe也是内存中的二进制代码,并不是真实存在的文件,我暂时称之为JVM.exe)   ,   这个过程花了5秒种。

     在这个操作系统中,汇编程序只能执行1秒钟。之后汇编程序就退出内存,也再也不执行了。内存中只剩下用Java写的JVM.exe。

     之后所有的操作都有JVM.exe来进行,JVM.exe负责将其它的Abc.class、Def.class等等编译成Abc.exe、Def.exe......操作系统正式启动。

     JNode的官方网站上有Java写的JVM的性能和SUN的JVM进行性能比较的结果,JNode中用Java写的JVM竟然能比SUN公司用C++写的JVM还快!见:   http://www.jnode.org/node/51

结果如下:
运行评测程序ArithOpt时:
JNode   :20ms*
Sun   J2SDK   :30ms**
     JNode的官方网站上有Java写的JVM的性能和SUN的JVM进行性能比较的结果,JNode中用Java写的JVM竟然能比SUN公司用C++写的JVM还快!见:   http://www.jnode.org/node/51

结果如下:
运行评测程序ArithOpt时:
JNode   :20ms*
Sun   J2SDK   :30ms**
     上面JNode   中用Java写的JVM与Sun   的用C++写的JVM的比较是在Pentium4   2Ghz   with   1GB   of   memory上比较的

     其实,无论是c++,java,vb,delphi还是perl,他们最终在cpu中执行时都是“二进制代码”,没有本质区别,他们的差别就在于:不同的编译器编译出来的“二进制代码”的优化程度不同。用程序员直接写出的汇编由于没有进行深入的优化,很难达到其它用java/c++/delph/vb编译器的优化程度,所以我说:手写汇编的速度达不到c++/java的速度,实质就是说:“手写汇编再编译出来的‘二进制代码’的优化程度没有用c++   /java编译器编译出来的‘二进制代码’的优化程度高”

     底层用C++或汇编来写,并不是因为他们更快,而是因为他们更节省内存、操作硬件更方便,VB是一种解释语言,它的内存占用量也很大,而且VB中直接操作内存等硬件的方法并不多,而且C++已经有许多已经成型的类库,用C++写JVM明显比VB强。如果你“感觉”eclipse或永中慢就认定Java慢,那么大家“感觉”WindowsXP慢是不是大家就应该认定 "C++慢 "呢?。谁快谁慢,拿数据说话吧。

     另外,不要因为某些java程序启动慢就认定java慢。这除了因为上面说的原因外,还因为:
C++启动较快也不全是因为C++本身的原因,许多C++写的软件所需的一些.exe和.dll在操作系统启动时就已经启动了(比如和窗口相关的一些.dll).
.NET程序启动较快就是因为.NET的虚拟机其实在操作系统启动时就已经启动了。
而其它一些大型软件如Microsoft   Word启动较快,就是因为操作系统启动时就已经启动了和Word相关的一些服务和功能


     当然对于能直接支持java   bytecode的CPU,booter.exe也可以不需要,只要有个Booter.class就可以,这样,整个操作系统就100%都是java写的了

     还有,就算在不支持java   bytecode的cpu上,也可以用java来写booter.exe。
原理很简单:写个   Booter.java,将它编译成Booter.class,再用Java写个“.class   to   .exe编译器”,将Booter.class编译成Booter.exe,这次,Booter.exe不仅存在于内存中,还可以将它写到硬盘上。这用   Java编译出来的Booter.exe所有的功能都和用汇编写的booter.exe完全一样。

     从此,我们就得到了一个“100%”的纯Java操作系统。


     完全可以用Delphi写一个C++编译器,再用这个编译器去编译abc.cpp的源代码,难道编译出来的abc.exe就变成了delphi程序吗?一个二进制代码是用什么语言写成的,是由“它是由什么编译器编译出来”决定的,而不是由“它的编译器是由什么语言写成的”决定的


     所以Java程序不是C++程序,因为无论Java的编译器是用VB、perl、C++、还是汇编写成的,只要编译编译的是Abc.java的源代码,这就是个java程序。

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     面向Java开发人员的Scala指南: 包和访问修饰…
     J2SE 路径问题综合分析
     深入Java调试体系: 第1部分,JPDA体系概览
     Apusic上用JavaMail发邮件
     Java开源协议小全
     java 实现压缩与解压缩ZIP
     利用Ruby简化你的Java测试
     开源Erlang真的能成为下一代Java语言吗
     Java SE 6 新特性: XML API与Web服务
     Java SE 6 新特性: 对脚本语言的支持
    最 新 推 荐
     深究Java虚拟机
     正确认识java JVM与c/c++的执行效率
     探索JVM上的LISP
     深入探讨Java的类加载机制
     解析Java的多线程机制
     Java程序员的迷失—论“虚拟机”
     认识Java虚拟机及其性能
     Java的ClassLoader与Package机制
     如何在Java中使用Robot类
     用java监视系统进程的两个解决方案
    相 关 文 章

    认识Java虚拟机及其性能
    当前Java软件开发中几种认识误区
    谨慎使用类变量及正确使用单例模式
    认识p-unit:一款开源的性能测试工具
    确保正确的清除
    产生正确的行为
    正确使用ArrayList和LinkedList—性能的改进
    用JBuilder 2005实现重构之认识重构
    在.net开发中几个重要的认识误区
    正确地封装Java类

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    门市地址:广东省佛山市南海区黄岐黄海路133号
    本网站所有内容未经许可不得转载或做其他使用