首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>Java基础>正文

网友分享:认识java JVM与c/c 的执行效率

http://www.oklinux.cn  2008-09-27  ccidnet DuDu  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

认为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还快!

结果如下:

运行评测程序ArithOpt时:

JNode :20ms*

Sun J2SDK :30ms**

上面JNode中用Java写的JVM与Sun J2SDK的用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程序。

共3页: 上一页 1 [2] [3] 下一页

上一篇:资料分享:Java开发中该注意的一些东西   下一篇:美国会赞同在军用设备中使用开源软件

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·资料分享:Java开发中该注意的一些东西
·教你轻松提高Java代码的性能
·Java开发最容易犯的几种错误
·Java开发中static/this/super/final用法
·网友分享:关于提高自己Java水平十大技术
·Java程序员必须要了解的七个开源协议介绍
·网友经验分享:学好java开发的关键七步
·对于Java开发人员必须遵从的十大基本法则
·Java基础:Java/J2EE中文问题终极解决之道
·初学者学习java第一步——JDK环境变量配置
·代码简单描述 初学Java语言之多态初体验
·教你如何妙用EditPlus 配置Java编译环境
·一个优秀Java程序员必须了解的GC工作原理
·JAVA和.NET两个平台对于安全功能的比较
·Java课堂:初学者都必须理解的几个问题
·基础知识:Java Web三层架构的配置详解
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·资料分享:Java开发中该注意的一些东西
·教你轻松提高Java代码的性能
·Java开发最容易犯的几种错误
·Java开发中static/this/super/final用
·网友分享:关于提高自己Java水平十大技
·Java程序员必须要了解的七个开源协议介
·网友经验分享:学好java开发的关键七步
·对于Java开发人员必须遵从的十大基本法
·Java基础:Java/J2EE中文问题终极解决
·初学者学习java第一步——JDK环境变量
·代码简单描述 初学Java语言之多态初体
·教你如何妙用EditPlus 配置Java编译环
  阅读排行
·使用AJAX技术实现网页无闪自动局部刷新
·高级:lucene全文检索应用示例及代码简
·关于java中相对路径,绝对路径问题总结
·一个非常有趣的使用spring框架AOP例子
·JAVA基础:一个struts hibernate入门实
·Java语言深入--java调用C/C 的过程
·一个基于Java Socket实现文件传输示例
·使用WEBWORK实现文件上传方法实例详解
·Hibernate配置文件中的映射元素详解
·初学者Structs中基本配置入门
·快速教您Apache Tomcat SSL的配置
·在struts里实现dtree通用树型结构讲解
·详细讲解Struts构架中action的跳转大全
·用JSP JavaScript打造二级级联下拉菜单
·基于AJAX的动态树型结构的设计与实现
网摘收藏: