讲到Java,很容易就想到程序设计语言。实际上,Java技术包含的内容远不止一种编程语言怎么简单。我们通常说的J2SE(java 2 标准版)就是在全局上对Java技术的一种称呼。


1、J2SE技术体系结构

下图包含了J2SE体系结构的全部重大相关技术,也描述了java程序运行不可缺少的过程。

 

要精通J2SE,必须对J2SE的四大重要技术有深入的了解。

(1) Java 程序设计语言

(2) Java Class 文件格式

(3) Java 虚拟机

(4) Java 应用程序接口(Java API)

 

实际上,每一次Java版本的升级,其主要的变化就在Java 虚拟机和Java API上,通常这两大技术也称为Java运行时环境(JRE)。JDK5.0、JDK6.0等的区别也就在JRE上。

 

2、J2SE体系结构的优势以及代价

 

J2SE的体系结构使得Java更适应于网络。其最大的两个优势就是:平台无关性和网络移动性。这一点在其体系结构的各个技术上都有体现。

(1) Java class文件的优势体现

      Java编译器并不能将Java编译成底层的二进制指令,而是编译成一种与底层平台无关的中间格式文件(.class)。 通常情况下不同硬件平台或操作系统的二进制指令时不能通用的。而.class文件是可以运行在任何支持Java虚拟机的硬件和操作系统上的。另外,class文件设计紧凑,可以快速的在网络上传输。

(2) Java API的 优势 体现

      Java API是运行库的集合,它提供了一套访问主机系统资源的标准方法。运行Java程序时,虚拟机装在.class文件所使用的Java API class文件,并和所有已近转载的动态库(本地方法)共同组成Java虚拟机运行的整个程序。

Java API天生就和平台相关的。

(3) Java 程序设计语言的 优势 体现

      Java在语言也体现出一定的平台无关性。比如所有的基本数据类型所占用的字节大小都是固定的。另外Java语言也是一种非常通用、安全的语言。与C++不同,Java对内存的自动管理要强的多,也更加安全。比如放弃指针,而使用对象引用。使用垃圾回收机制而不是让程序员自己手动回收。

(4) Java虚拟机的优势体现

      和Java API一样,JVM是平台相关的。如果Java程序需要访问本地资源的话,Java虚拟机是一定要调用本地方法的。也正是应为JVM的存在,才导致了Java平台无关性的优势。

 

 

代价:

       Java做到了不同硬件平台、不同操作系统的平台无关性要求。但却牺牲了Java在某些特定环境中使用的资格。在很多的大型IT公司,其后台开发或者算法设计方面都要求C/C++,而不是Java。

       (1)  Java的运行效率是一直被人攻击的问题。其根本原因就在于JVM需要先将class文件解释成系统平台能够运行的底层指令,再由底层平台运行。而这一过程肯定是要比直接运行编译好的底层指令要慢的多。当然,随着JIT(即时编译器)和自适应优化器的产生,使得JVM解释执行的过程效率提高了很多。使得Java与C在运行效率上的差距不再那么明显了,但是在要求极高的实时环境下,仍然还是不够的。

       (2)  Java的另外一个代价就在于内存管理和线程调度方面的缺陷。垃圾回收机制虽然使得开发效率提高了不少,但是你并不知道垃圾收集器什么时候开始回收垃圾。这一点对于很多需要海量数据处理,高性能的系统就很不适应。另外,JVM对线程调度的规范是十分笼统的,松散的规则有利于Java程序的移植,但却牺牲了很多特定环境下的效率。比如需要实时响应事件的软件。

 

 

总而言之,Java语言适合网络环境中的Web开发,但并不适合对运行性能和实时响应要求极高的后台系统。因此,如果还在Java和C++之间难以抉择的IT同行们,首先问问自己想干什么更加实际一些。