从语法层面上讲。
1. 1.5增加并发包(java.util.concurrent)
2. 泛型。
3. 增强的for循环
4. 增加可变参数,例如:public static void main(String[] args)现在可以写成public static void main(String... args) ;
不确定参数到底有几个时倒是可以用这种方式来代替以往传递一个数组的方式。
可变参数同时可以跟固定的参数混合使用。
但同时可变参数有一些限制:一个方法的参数中不能同时拥有2种类型的可变参数,也就是说:
public void foo(String ... str,Integer ... i)这样是不行的
5. 枚举
6. Annotation
性能层面上,
1. 自动选择垃圾收集器,Heap大小和运行时编译器。
2. 高精度的时间测量。以前使用System.currentTimeMillis,现在可使用System.nanoTime,精度更高一些。
System.currentTime(),它的精度是毫秒,返回值 是 从1970.1.1的零点开始到当前时间的毫秒数,理论上这个可以用来算当前的时间,而且可以用这个值来构造一个Date对象。但是 System.nanoTime()却是不同,代码注释上有这么一句: The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative).
这个返回值是一个从确定的值算起的,但是这个值是任意的,可能是一个未来的时间,所以返回值有可能是负数。
所以说这个System.nanoTime()方法只能用来计时,例如:
long s = System.nanoTime();
....
System.out.println(System.nanoTime() - s);
3. 增加了StringBuilder
4. 针对于X86,X64 CPU做的优化。例如System.arrayCopy
5. 在X86和AMD64上支撑大的内存页。
6. 锁粗化。
应用场景层面上,
在jdk1.5之前,java多用于中小企业应用和手机应用。很少用语大型高并发场景。
一方面是基于java本身的性能担心。
另一方面是成功案例也不多。
现在几乎各家互联网网站都在使用java,只是承担的角色可能不同。
比如阿里系的网站,Facebook的hadoop集群,搜狐,ebay这些都是基于java搭建的典型。
也反映了java在大型高并发的应用场景是可行的。