先说优点吧,比较显见一点
1.指针.
任何一个学过C或者C++的人都知道指针的操作对于他们是很重要的,为什么,指针能够支持内存的直接操作,这样的直接操作能够带来的是效率上的提高.但是任何一个东西都是有副作用的,指针给程序员带了的混乱也是无可比拟的.对于一个不是很强劲的C程序员而言,指针是要命的(对我而言也是,我几乎不会写C代码).而JAVA就为我们省去了这样的麻烦,或者说JAVA完整的限制了对内存的直接操作,让程序员能够安心去搞业务逻辑,而不用管自己后院的那堆内存有没有人来收拾.
2.垃圾回收
其实垃圾回收也是JAVA对于内存操作的限制之一,也大大解放了程序员的手脚.但是也正是这样的一个内存保姆的存在导致JAVA程序员在内存上几乎没有概念...一个纯粹的JAVA程序员对于内存泄露这样的问题是从来没有概念的,因为他从来不用担心,因为大多数情况下即便他大手大脚也不会有什么问题
3.平台无关性
平台无关性的真正意义在于程序的可移植性高,能够在多个平台平滑迁移。这点就特别适合网络应用。
好吧,然后我们再来看看缺点吧:
1效率
1.1当然首先就是内存操作限制带来安全的同时带来的副面效果了.....
1.2 其次呢,就是面对对象的一个很重要的特点所带来的——多态导致的。
1.3平台无关性带来的。由于需要平台无关,所以JAVA是不能直接调用OS的API的,JAVA需要调用自己的API来隐式地调用OS的API,大家可想而知这样的效果。多一层调用,必然多一层代码需要加载到栈内了。
2逆向编译问题
由于JAVA程序是动态连接的,从一个类到另外一个类的引用是符号化的。在静态连接的可执行程序中,类之间的只是直接的指针或者偏移量,。相反地,在JAVA class文件中,指向另一个类的引用通过字符串清楚地标明了所指向的类的名字。如果引用指向一个字段的话,这个字段的名字和描述符会被详细说明。如果引用指向一个成员变量,这个成员变量的名字和描述符(方法的返回类型,方法参数的数量和类型)也会被详细说明。
3 线程调度问题
Java虽然是一个总进程下的多线程,但是线程间的调度没有非常的清晰,由于为了能够支持多种系统的不同的线程支持策略,JAVA只能采取这样笼统而又松散的线程规范。 |
|