17 java 存在的问题(转)

java的问题:

1.性能:java的内存管理似乎比较自动化,但其实性能不是特别好。尤其是new对象的时候没有节制。在java中,有些对象构造成本很低,有些 很高。特别在UI编程的时候,大多数的UI对象其构建成本都比较高昂。如果在开发过程中没有节约意识,肯定会导致JVM不停的GC,系统表现很卡的样子, 当然,彻底的当掉可能还不会,但基本上工作已经是非常的缓慢的了。

2;引用:JAVA中其实在大量的使用对象引用,对象引用可以减少内存占用,不去构建不必要的对象。但事实上,多数程序员对引用的理解不是很到位,结果导致过多不必要的对象构建,虚耗内存。代码可读性也不佳,编写的时候尤其觉的疲惫。

3;面向对象:java是面向对象的语言,但是它有基础类型,这些基础类型不是面向对象的,不能当作引用传递。一般来说,这些基础类型可以用来表示 一个对象的状态。java中的对象一定要包含状态,没有状态的对象其实是不存在的,没有状态的东西不是对象,而是一个行为集合。但是java中没有一个明 确的结构来表达这个情况,所以只能写一个类来表示,同时将这个类的构造定义成私有的,防止被别人构建。这个时候的类的作用等同与命名空间。java在面向 对象的支持方面其实是很残缺的,缺乏很多必要的支持,比如虚函数,多重继承,友元。这种残缺,导致设计困难,所以java的系统都十分的罗嗦。

4:复杂:java越来越复杂了。注解,泛型,枚举,特性很多。

5:不可变:java支持不可变,但是大多数人并不了解这个主题。不可变系统其实比较容易实现,同时也不容易出错。但是java是基于引用的系统,不可变会导致大量的内存问题。JVM缺乏尾递归优化,这其实也是一个问题。

转自:http://my.oschina.net/clarkhill/blog/59546

时间: 2024-10-27 10:40:12

17 java 存在的问题(转)的相关文章

17.Java 反射机制

1.反射的定义 反射之中包含了一个"反"的概念,所以要想解释反射就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是"反"指的是通过对象找到类. 2.Class对象 2.1 概述 Class对象是反射的起点,可以利用类的Class对象创建类的实例(newInstance),同时提供了操作类的工具,可以获取类的详细信息,并且使用特殊的技术实现类的加载(运行时加载,在编译的时候还没有该类的c

JavaEE Tutorials (17) - Java消息服务示例

17.1JMS示例概述23317.2编写简单的JMS应用233 17.2.1启动JMS提供者234 17.2.2创建JMS受管理对象234 17.2.3构建所有简单示例235 17.2.4发送消息235 17.2.5同步接收消息238 17.2.6使用消息监听器完成异步消息传送240 17.2.7浏览队列中的消息242 17.2.8在同一个目的地运行多个消费者245 17.2.9确认消息24517.3编写更高级的JMS应用247 17.3.1使用持久订阅247 17.3.2使用本地事务24917

【java提高】(17)---Java 位运算符

Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算符. 主要运算符有以下:与(&).或(|).异或(^).取反(~).左移(<<).右移(>>). 一 与(&) 和 (|) 1.&(按位与) 规则:将两边的数转换为二进制位,然后运算最终值.运算规则即(两个为真才为真)1&1=1 , 1&0=0

17.java常用类

一.字符串相关类 1.String类 String:字符串,使用一对""引起来表示.1.String类是声明为final的,不可被继承2.String实现了Serializable接口:表示字符串是支持序列化的. 实现了Comparable接口:表示String可以比较大小3.String内部定义了final char[] value用于存储字符串数据4.String:代表不可变的字符序列.简称:不可变性. 体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的val

17 Java语言基础long与float的取值范围谁大谁小

结论 float的取值范围比long大 验证 1 public class Test1_DataTypeConversion { 2 3 public static void main(String[] args) { 4 5 float f = 1.3f; 6 long l = 34; 7 // l = f; 8 // System.out.println(l); 9 //Type mismatch: cannot convert from float to long 10 f = l; 11

Java面试17|Java基础

1.final相关 (1)final在编译期的优化 只有在编译阶段能确定这个final引用赋值的内容,编译器才有可能进行编译时优化,而编译期能确定的内容只能来自于常量池中,如int,long,String等常量,不包含new String()等,也不包含方法返回值.将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入"嵌入"调用里(内嵌机制),这样可以提高运行效率. (2)final可以实现可见性 被final修饰的字段在构造器中一旦初始化完成,并且构造器没有把 &qu

17.Java重构(Eclipse)

1.定义 在不改变代码行为情况下改善代码设计: 2.好处 1.改善设计: 2.让软件更加容易理解: 3.可以协助寻找bugs; 4.可以提升开发速度: 3.使用 3.1结构重构(改名字) 右键类文件,Refactor->Rename 3.2移动(移动到另外一个包) Refactor->Move 3.3修改方法的名称 选择方法右键,Refactor->Change Method Signature,调用该方法的名字都改了 3.4把方法放置在父类接口里 Refactor->Pull U

5.17 JAVA

class Computer{ int num=0; boolean flag=false; public synchronized void set(){ if(flag){ try{ super.wait(); }catch(InterruptedException e){ e.printStackTrace(); } } try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } num++

Java工程师成神之路

对JAVA的学习点总结很好的文章,小伙伴可以看看自己会哪个不会哪个然后针对性学习. 转载自Hollis 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://ifeve.com/jmm-faq/ 1.1.2. 了解JVM各种参数及调优 1.1.3. 学习使用Java工具 jps, jstack, jmap, jconsole, jinfo, jhat,