免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: redspider
打印 上一主题 下一主题

JAVA比 C++ 高效??  关闭 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-09-23 22:34 |只看该作者
原帖由 reiase 于 2008-9-23 22:27 发表
没一句可以赞同的

jvm对程序(java)所进行的全局优化,实际上是写jvm的程序员做的优化(jvm)
偷换概念

如果让这个实现jvm的人去写最终的c算法,肯定比java版本效率高。
没有根据,纯粹意淫


其实 ...


再说一句 你给的这4点 我对第一点
jvm对程序(java)所进行的全局优化,实际上是写jvm的程序员做的优化(jvm)
补充一下
ytl同学
这个确实是你想当然了
jvm对程序所进行的全局优化  的确 是由jvm自己完成的 非程序员自己完成的

另外 对于这样的问题讨论 大家都是外行吧
至少我觉得ls很多楼的回答都很业余

本着 实事求是的 态度 建议去javaeye的java版看看
那里的地位也相当于chinaunix的c

在这里这些肤浅的概念抛掷。。。 我觉得离意淫的地步已经不远了

没有必要对自己根本玩不转的东西 翻来覆去的高谈阔论(包括辩论两方 不针对任何个人 请勿喷 本人只是偶尔用java也是个菜菜 从ls们的回答 我个人也没看到有java高手 甚至熟手的出现)


==========
修改一下 ytl同学 我没太看仔细 你说的是jvm的优化是写jvm的程序员的做的优化
偶看成了是写java的程序员写的优化
不过都差不多了 这个论据还是没啥理由。。 照你的意思c快不是因为c快 而是因为写c编译器的工程师做了优化吗
又回到01的问题 只有01最优化。。。

[ 本帖最后由 blizzard213 于 2008-9-23 22:53 编辑 ]

论坛徽章:
0
42 [报告]
发表于 2008-09-23 22:38 |只看该作者
原帖由 blizzard213 于 2008-9-23 22:34 发表


再说一句 你给的这4点 我对第一点
jvm对程序(java)所进行的全局优化,实际上是写jvm的程序员做的优化(jvm)
补充一下
ytl同学
这个确实是你想当然了
jvm对程序所进行的全局优化  的确 是由jvm自己完 ...


没错,我就是业余的。
blizzard213好有眼光阿

论坛徽章:
0
43 [报告]
发表于 2008-09-23 22:41 |只看该作者
原帖由 reiase 于 2008-9-23 22:38 发表


没错,我就是业余的。
blizzard213好有眼光阿


嘿嘿 这条csdn上的回帖 我觉得大家可以看看 当然自己都有自己的想法 不强求 但是兼听则明:

C++的速度是由C++编译器在程序员开发时编译出来的机器语言的优化程度决定的。   
  Java的速度是由Java的JIT和HotSpot编译器将java   bytecode在运行时“即时”编译成针对本地CPU的优化的本地代码决定的。   
   
  比速度的实际就是在比:看C++编译器和java编译器谁能产生更优化的机器代码。   
  很明显,C++的编译器不如java的JIT和HotSpot编译器,因为JIT和HotSpot编译器能针对CPU指令集进行人优化、能在运行时根据使用频率对method进行内联和优化。而C++的静态编译器永远也做不到这些   
   
  两者有着本质的不同,但是有些Qpper用一辈子也无法理解这其中的差别,   
  他们只能抱着一个可怜的、没有任何根据的“C++比Java快”进棺材   
   
   
  某些Qpper们认为:根本就不存在Java,只存在C++,Java只是一个C++的程序。   
  但他们却在有意回避一个事实:   
   
  用C++编译器编译出来的本地代码才是C++程序   
  用Fortran编译器编译出来的本地代码才是Fortran程序   
  用Delphi编译器编译出来的本地代码才是Delphi程序   
  用C#编译器编译出来的本地代码才是C#程序   
  用VB.net编译器编译出来的本地代码才是VB.net程序   
  用Java编译器编译出来的本地代码才是Java程序   
   
  如果照某些Qpper的观点,那么世界上只有机器语言一种语言,因为其它语言归根结底都是机器语言程序,岂不荒唐?   
   
  决定一个程序是什么语言的程序,并不是由“编译器是什么语言写成的”来决定的,而是由“这是个用来编译什么语言的编译器”来决定的。   
  如果用delphi写一个C语言的编译器,难道就能说“C语言实际是个delphi程序”么?Java中的JIT编译器可能是用C++写的,但就能因此说“Java程序是个C++程序”吗?!   
  如果用java写一个将C语言编译成本地代码的程序,难道就能说“C语言实际是个java程序”吗?!

==========
个人觉得他也有些逻辑错误 但看看无妨

[ 本帖最后由 blizzard213 于 2008-9-23 22:44 编辑 ]

论坛徽章:
0
44 [报告]
发表于 2008-09-23 22:46 |只看该作者
原帖由 reiase 于 2008-9-23 22:27 发表

前半句表明,个例已经反驳了你的观点,后半句是套话,无视 ...


其他的都是乱喷,单就这句批驳一下你的思维错误。
你根本不清楚我的观点是什么?我的观点就是:java比c++快是特例,而特例没有普遍意义
天鹅休息的时候,癞蛤蟆可能跳过天鹅的高度,难道你认为这个个例反驳了“一般情况下天鹅比癞蛤蟆跳的高”这个观点?

论坛徽章:
0
45 [报告]
发表于 2008-09-23 22:53 |只看该作者
原帖由 blizzard213 于 2008-9-23 22:34 发表


再说一句 你给的这4点 我对第一点
jvm对程序(java)所进行的全局优化,实际上是写jvm的程序员做的优化(jvm)
补充一下
ytl同学
这个确实是你想当然了
jvm对程序所进行的全局优化  的确 是由jvm自己完 ...


既然你说是jvm自己做的优化而不是实现jvm的程序员做的,那请问你,如果将来出现量子cpu并且也兼容现在的电子CPU方式, 那么你认为目前的java 1.5能不能自动针对量子计算来做JIT?
如果答案是不能,那么很显然,jit的一切优化,都是程序员实现固化在jvm里的,而固化的不会比针对具体场景实现的还优化!

论坛徽章:
0
46 [报告]
发表于 2008-09-23 22:59 |只看该作者
原帖由 ytl 于 2008-9-23 22:53 发表


既然你说是jvm自己做的优化而不是实现jvm的程序员做的,那请问你,如果将来出现量子cpu并且也兼容现在的电子CPU方式, 那么你认为目前的java 1.5能不能自动针对量子计算来做JIT?
如果答案是不能,那么很显然 ...


我已经修改了 刚才确实看得不是很仔细

但是你居然坚持jvm的优化是写jvm的程序员固化在jvm中的优化
那么ok gcc的优化同样也是写gcc的程序员固化在gcc中的优化

这样的观点有什么意义呢?
任何程序都是由人写出来的 最终都是编译为01运行 照你的理论 只有这两点是正确的 别的都没意义

论坛徽章:
0
47 [报告]
发表于 2008-09-23 23:07 |只看该作者
原帖由 blizzard213 于 2008-9-23 22:59 发表


但是你居然坚持jvm的优化是写jvm的程序员固化在jvm中的优化
那么ok gcc的优化同样也是写gcc的程序员固化在gcc中的优化
...


虽然你这样说没错,但是你有意忽略了一个关键的事实:java程序要针对平台优化几乎要完全借助JVM固化的优化;而gcc程序则不然,因为c++给程序员提供了直接控制平台的能力
这是由2中语言的设计理念决定的:C给程序员控制平台的能力,而java试图把程序员从具体平台完全隔离出来

[ 本帖最后由 ytl 于 2008-9-23 23:13 编辑 ]

论坛徽章:
0
48 [报告]
发表于 2008-09-23 23:10 |只看该作者
就算java再快,只要你C足够牛,照样子写个虚拟机,至少能打平吧,所怎么也不能说java比C快吧

论坛徽章:
0
49 [报告]
发表于 2008-09-23 23:15 |只看该作者
原帖由 ytl 于 2008-9-23 23:07 发表


虽然你这样说没错,但是你有意忽略了一个关键的事实:java程序要针对平台优化几乎要完全借助JVM固化的优化;而gcc程序则不然,因为c++给程序员提供了直接控制平台的能力


是么? 是java针对各种平台的优化而不是java针对平台的优化
c++给程序员提供了直接控制平台的能力 没错 但给你提供的是ansi c++标准所限制的所谓平台"特性"

ok 问你一个问题
同一个c++程序
对x86/arm/sparc/mips不同平台的优化 如何从代码上表示出来?

你是不是要回答通过不同平台的c++编译器提供优化呢
那你不是和自己自相矛盾么没错
c++的确给程序员提供了直接控制平台的能力,但所提供的这个能力仅仅是对通用性汇编原语的一个粗粒度的映射
通过单一的c++源码编写 你根本无法完成针对不同平台的优化 仍然要通过编译器的非标准扩展来完成 而编译器的非标准扩展
最终直接调用汇编实现平台级的优化

如果可以从源代码级别上看出针对不同平台优化所做的工作 那么ok 你举出一个例子来 我想学习一样

不过 你说的
这是由2中语言的设计理念决定的:C给程序员控制平台的能力,而java试图把程序员从具体平台完全隔离出来
我赞同

[ 本帖最后由 blizzard213 于 2008-9-23 23:25 编辑 ]

论坛徽章:
0
50 [报告]
发表于 2008-09-23 23:17 |只看该作者
贴个源代码测试一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP