当前位置:  技术问答>java相关

大家一起看看,讨论讨论

    来源: 互联网  发布时间:2015-02-21

    本文导语:  Java无用论 作者:不详  1. 写这篇文章的目的  学了一些关于Java的东西,个人认为它很不好用。为了减少上当人数  特写此文。  尽管 java 宣称它是100%面向对象,而C++不是。但是宣称100%面向  对象本身就不是什么...

Java无用论 作者:不详 
1. 写这篇文章的目的 
学了一些关于Java的东西,个人认为它很不好用。为了减少上当人数 
特写此文。 
尽管 java 宣称它是100%面向对象,而C++不是。但是宣称100%面向 
对象本身就不是什么面向对象的思想。面向对象的本质目的是提高生 
产率。讨论一种语言是否100%面向对象就好像讨论我们的社会性资性 
社一样滑稽。其实学习面向对象不一定非要使用java不可。我反而认 
为120%面向对象的C++是不错的选择。 
Java号称跨平台,其实这是只一个梦想,也不妨用骗局这个词来形容 
。软件的移植性仅仅和虚机相关吗?照此理论是不是可以说符合IA32 
体系的软件在任何IA32体系上都能正常运行。那我怎么没看见SCO: 
:lf 在 NT上运行?显然,除了虚机,软件二进制规范(执行文件格 
式、连接方法)、运行时间库和系统调用也是软件移植问题因素。而 
java规范中显然不包括完整的运行时间库和系统调用,甚至二进制规 
范也有不兼容的地方(比如本原接口和固有接口)。软件总不能脱离 
它的运行环境,不兼容就从这里开始。 
要提高软件生产效率。应当认认真真的研究系统结构、二进制规范、 
系统调用结构才是解决问题的方法。靠概念游戏这种投机取巧的方法 
是行不通的。 
我说java不好,甚至不必对其侧目,你信吗?我估计信的人不多。我 
只是想说"上当之后别怪我没说"。 
另外如果您在Java中发现了甜头也不妨告诉我。互相学习吗:)。 
2. Java究竟是什么? 
Java是一种虚拟硬件系统结构,是一种软件二进制规范,是一种编程 
语言。当我们看到Java一词时,它可能表达上述三个含义钟的任何一 
个。尽管这三个东西可以独立存在,不过实际上他们总是在一起出现 
。所以也很少有人分的那么明确。使用Fortran语言编写Java虚机上 
的代码理论上是可行的。但是有谁乐意做这件事呢? 
作为虚拟硬件体系结构, 
Java虚机和ALPHA、PowerPC、SPARC、IA32、51、960是同一概念上的 
东西。也许您会奇怪?他们怎是同样的东西呢?IA32不就是PIII、PI 
V那一大块吗?其实不然、我们知道386、P5、P6、P7的内部结构非常 
不同。属不同的微体系。但是他们实现了相同的IA32指令集合。IA32 
也不一定非要通过硬件实现,通过软件也可以。这种软件CPU产品广 
泛出现在操作系统和CPU密集软件的开发、调试工具上。主要用于在C 
PU出现之前调试软件。Java指令集同样也可以通过硬件实现。只是在 
半导体工业激烈竞争的时代,没有大公司(含SUN)愿意把这么做。 
SUN常常说M$很害怕java。他们之间的确存在很强的竞争关系。倒不 
是Java高级语言的问题,我认为是Java二进制规范和 Windows操作系 
统存在竞争。不妨考察Java中的(.class文件格式、装入方法、执行 
过程、JDBC接口、J3D接口)和Windows中的(PE文件格式、DLL文件格 
式、装入、连接方法、ODBC、Direct3D)。就知道竞争多么强烈。和N 
T/IA不同。Java.exe执行程序包含虚机规范和二进制规范。在NT/IA 
中是分离的产品。 
人们总喜欢把Java高级语言和C++类比,他们之间的确存在很过相似 
的地方。不过我认为C++和Java不存在什么竞争。它们使用在不同的 
场合。他们的区别(内存管理、对象类型、线程规范)决定他们的用 
途。用形似而神不似来形容C++和Java吧。仅从高级语言方面来看。J 
ava真正竞争来自ECMAScript 。也就是JScript和VBScript。 
3. Java虚机和IA32比较 
Java VM和IA32最大的区别是Java VM的主要实现不考虑效率问题。由 
此派生出寄存器少,指令结构简单(同样功能生成的程序代码长), 
寻址空间小,寻址方法少、数据类型少等。除了上述问题,Java VM 
没有涉及指令(显式或隐式)并行问题。 
3.1. 基本特性差别 
3.1.1. 数据类型比较 

Java VM 
IA32 
整数类型 
byte 
short(16bit) char(UnionCode) 
int 
long (64bit) 
{不存在无符号算术运算指令,另外注意这里没有boolean类型} 
byte 
Word(16bit) 
DoubleWord(32bit) 
QuotaWord(64bit) 
DoubleQuotaWord(2*64bit) 
BCD/PackedBCD 
BitField 
{存在有符号和无符号两种运算指令} 
浮点类型 
float(32bit) 
double(64bit) 
float(32bit) 
double(64bit) 
long double(80bit) 
Packed double(2*64bit) 
地址 
returnAddress* 
8bit , 16bit , 32bit , 48bit都有 

没有显示的看到returnAddress 
类型的宽度,不过。通过指令goto(0xa7)和goto_w(0xc8)来看。retu 
rnAddress是可以是16位或32位的。 
关于double和Long的原子问题:在目前的java规范中,double和long 
作为两个独立的32 位数据独立存取。这样可能产生同步问题。历史 
上Intel的CMPXCHG8B(Pentum pro以上CPU提供)指令就存在过类似 
问题,一度被指责是CPU设计问题。好在CMPXCHG8B很少使用,没有造 
成什么事故。 
3.1.2. 指令集 
指令类型 
JavaVM 
IA32 
Load/Store 
1) 数据和运算栈之间单个移动 
2) 常数移入运算栈 


1) MOVE 
2) CMOVEXX 
3) 交换,琐操作 
4) PUSH/POP 
5) PUSHA/POPA 
6) IN/OUT 
元算指令 
add , sub , mul , div , neg , rem , shl , or , and , xor 
比Java多多了,主要多在显式并行上 
类型转换 
基本类型之间可以互相转换 
有(由于类型很多,转换指令也有很多) 
方法调用 
4条指令 
一大堆,主要多在权限切换(调用门)、长短跳传不同上。 

3.1.3. 异常 
虽然JavaVM有异常的支持,不过很简单。它不区分中断、陷阱和故障 
。也不能明确指出出错代码的PC,并返回那里重新执行。 
3.1.4. 执行态 
Java VM没有用户态和系统态执行区分。当然也没有MMU(管理内存分 
页、分段的内存管理单元).除非被Java高级语言限制,java VM汇编 
代码也能完成一些恶意操作。 
3.1.5. 小结 
总而言之,Java VM很简单。SUN总是认为通过编译优化Java可以达到 
C++速度。显然是谎言。如果要编译成本地代码,显然要丢失移植性 
。如果不编译成本地代码,效率问题如何解决?有一种及时编译的设 
计。对于很小的应用也许可行。对于规模的应用呢?要知道优化编译 
很费CPU和内存。像IA64体系的优化方案,要编译很多遍才能优化完 
成。要运行时刻编译是不是天方夜谭。 
4. Java高级语言和C++、JScript比较 
4.1. 效率,谎言 
很多书上写Java是很快的语言。这时一定要看清楚是比谁快。语句传 
了几本书难免有些误差,比较对象经常有意无意丢失。一般认为Java 
比JScript快。的确快很多,不只十倍。我也承认Java比JScript快。 
但有人说Java和C++效率接近。这就是骗人了。他们也能做出试验证 
明,试验结果好像也能证明结论。他们的实验大概都是形如这样。 

Java, C++测试代码: 
for ( I = 0 ; I >> , (boolean)& and | , instanceof。但是我们分析一下。由 
于java不支持运算符重载,只好单独实现(字符串 +)。由于java 不 
区分有符号和无符号数据,所以使用>>>来表达无符号右移、由于jav 
a中的boolean和整形之间没有联系,又不支持运算符重载,所以对bo 
olean类型单独实现& and |。至于instanceof的确是Java 独创,不 
过这个运算符的用处还要考虑。我在引用某变量时居然能不知道它的 
类型? 

6.6. 兼容以不兼容为代价 
使用java 必须一切从头开始。java不能继承原有的工作。而且它也 
不能很好的和其他语言混合编程。这就和C++区别大了。首先C++继承 
了大部分C语言代码。其次,C++可以和Pascal , Fortran , Basic, 
T-SQL等其他语言方便混合。尤其方便的是ASM语言和 C++混合。发挥 
不同语言的长处。俗话说"朋友多,天地宽"吗。而 java只能孤军 
奋战了。 
7. 结束语 
写这篇文章用了一天半的时间。又在Java上花了这么多时间,真是心 
痛。但愿有些效果。 
 

|
我正在入门,不看也罢!~

|
如果想学java就不要三心二意
每一样东西都有自己的优缺点,坚持就是好的

|
不想辩驳什么,但你所说的很多东西我想是你没有理解而已。我选择java就是因为它符合面向对象编程思想,决不是什么跨平台,那只是在应用和操作系统间加一层东西罢了,如果sun搞垄断(可惜他没这个实力),也就跟微软的没什么区别。但他绝对比C++更符合自然思维习惯,更符合软件工程思想(个人对C#到满期待的,可惜没空研究)。你说的问题恐怕是你个人的开发习惯的问题,就我个人,我是不会用编码来开始描述我的开发对象的,除了用Java的接口。

|
写这篇文章的老兄,理解问题太过浅显,就像ycats(加菲猫)所说“但你所说的很多东西我想是你没有理解而已”,其实当你真正理解了java,正真理解了design pattern后,你会为你发表的浅见而羞愧的。那些哗众取宠的臭秀才早就没有人要了。在这一行要真本事。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 简单!看看这个方法!简单!看看这个方法!
  • linux高手看看
  • 好消息,近来看看......
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 想看看linux的内核源代码!从哪里开始!给点建议!!
  • 我初学JAVA,大家愿意交朋友的进来看看!留QQ的给分啊!
  • 关于全选的问题大家帮忙看看~
  • jsp论坛,大家快去看看,解决树形目录http://52jsp.126.com
  • 各位大侠,小侠,快过来看看。
  • 看过操作系统设计与实现的进来看看
  • 请进来看看!!
  • 帮我看看下面这条语句??
  • 大家去软件工程论坛里面去看看那,我发了700分的问题!!
  • 建议去这里看看,有好多基本的重要知识! 绝对值得一看!
  • .net/c#/asp.net iis7站长之家
  • 到 http://www.xbit2008.com 看看技术文章把! 我写的或从网上摘的!
  • 虚心请教问题,帮我看看好吗?
  • 我刚申请的域名rootsafe.com大家看看怎么样? up有分!
  • 帮我看看是不是被黑了?
  • 我的Solaris启动不了了,请帮忙看看


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3