JAVA 真的慢吗?

客家族_Shark曾_小凡仙
博客专家认证
2010-06-04 11:43:05
第二个主题:java是不是注定低效率?

java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。

中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少,效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。

我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译,有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。

因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。而且,我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。

本文转自:2010-05-30 22:19 诺贝尔
http://blog.sina.com.cn/s/blog_614f64e10100iowh.html
...全文
474 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
jisi772864447 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 renxianzuo 的回复:]
说它慢,是因为你的不理解
[/Quote]

真的不慢 ,看你怎么用了
renxianzuo 2010-06-29
  • 打赏
  • 举报
回复
说它慢,是因为你的不理解
wodemeng280248517 2010-06-29
  • 打赏
  • 举报
回复
java是不是很不好学,那就面的命令我都不会
chzhm159 2010-06-28
  • 打赏
  • 举报
回复
我是问分数而来
dinghun8leech 2010-06-28
  • 打赏
  • 举报
回复
C#更慢
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 zengmuansha 的回复:]

没人继续回答 吗?
[/Quote]

你去做个 20 亿的 int for 循环看看,到底是 C 快,还是 Java 快。
O溺水的鱼0 2010-06-28
  • 打赏
  • 举报
回复
java的快慢需要根据自己的应用来开发,需要编译成字节码,是为了实现跨平台,这样能保证在多个平台下都可以正常运行。
蜡笔和小新 2010-06-28
  • 打赏
  • 举报
回复
学习了 原来JAVA挺快的 没有比较过
  • 打赏
  • 举报
回复
没人继续回答 吗?
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 zhaobocheng 的回复:]

楼主说是JAVA哪个方面慢?
如果就开发效率来讲.NET要比JAVA快。
如果就运行速度来讲,两个都差不多。
[/Quote]

自然是运行速度啊!
www.icbc.com 工商银行的网站 用JSP开发的。 它的业务层估计也是JAVA。
浏览起来确实感觉不很快!




另外声明 是JAVA 跟.NET开发的软件 运行速度比!

JAVA 以前是很慢,这是事实!


现在感觉不很慢,不知道是硬件提高带来的,还是JAVA改进了
zhaobocheng 2010-06-06
  • 打赏
  • 举报
回复
楼主说是JAVA哪个方面慢?
如果就开发效率来讲.NET要比JAVA快。
如果就运行速度来讲,两个都差不多。
临远 2010-06-06
  • 打赏
  • 举报
回复
是非常慢,你去学汇编吧。
qx8668 2010-06-05
  • 打赏
  • 举报
回复
都升级到JDK1.6,看到1.6以下的都头大

JAVA不是为向下兼容做了很多工作,怎么还有不升级到1.6

真是狗屎!!
humanity 2010-06-05
  • 打赏
  • 举报
回复
比 JIT 更新潮的 AOT 编译器出来了。IBM 1.6 的 JVM (比如随 WebSphere 7.0 打包的)中提供了。不过不是很明白,这个文章里面说的 AOT 的“需要谨慎编译,由开发人员处理” 是什么意思,如果太专业了那我还是不用它。看上去启动更快是明显的。

http://www.ibm.com/developerworks/cn/java/j-rtj2/
phrhenry 2010-06-05
  • 打赏
  • 举报
回复
顶一下
阳光黯淡 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 cl61917380 的回复:]

mark
[/Quote]
UP
  • 打赏
  • 举报
回复
顶一下
Java技术栈 2010-06-05
  • 打赏
  • 举报
回复
月经贴了。哈哈
hongbowu 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 panhaichun 的回复:]
具体中间码是否每次编译我也不太清楚,

但每次更换class文件都需要重启服务器,我想应该只编译一次就成本地码,如果直接解释class文件就执行的话没必要重启服务器。

当然也支持热部署
[/Quote]
理论上是不需要的,但有时候还要,关键是看中间件和类的内容(如静态数据)
dracularking 2010-06-05
  • 打赏
  • 举报
回复
JVM一次是处理一条字节码指令,解释型的嘛,这可能就是执行缓慢的原因
而引入了JIT之后,相当于第二个编译器,在某些系统平台下,可以将字节码编译为特定系统码,
这样就能执行更快
加载更多回复(27)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧