1引言
Java技术是随着Internet的普及而迅速推广起来的一种技术,因其固有的网络移动、面向对象、平台无关、安全等诸多特征,迅速成为企业级应用开发的首选技术。Java虚拟机(JVM)在多个平台上实现了统一语言,Java语言丰富的开放式类库大量使用设计模式,成功地改变了很多程序员的编程思想和习惯。很多人了解Java语言,知道Java虚拟机。但对于Java的技术体系结构是如何衔接和有效运作的,却不是每个程序员都十分了解的。Java的技术框架包括了Java语言、Java虚拟机、JavaAPI和JavaClass文件(字节码),虽然Java—词被多数人认可为Java程序设计语言。可用图1来说明Java的技术框架各部分的关系。
Java程序设计语言是编写Java程序的基础,Java字节码和class文件是Java跨平台性的基础,java文件通过Java编译器生成class文件。Java类库是Java程序快速开发的根本,也是Java社区最大的财富。Java虚拟机是平台相关的,在不同体系结构和不同的操作系统环境中,都需要有与平台相关的Java虚拟机的实现。
2Java程序设计语言
Java语言最初是由JamesGosling为嵌入式消费电子应用设计的,原名为“Oak”后经多年多人设计优化和多方支持帮助,发展为通用目的的、并发的、基于class的面向对象程序设计语言。允许程序设计者一次编写Java程序,可以在多个不同体系结构、不同操作系统、运行有Java虚拟机的平台上运行。Java语言具有简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、动态性等多种特性。
Java是C++语言的“纯净”版本,没有头文件、指针运算(指针语法)、结构、联合、操作符重载、虚基类等等。Java副除了C++中许多很少使用、难以理解、易混淆的特性。另外,Java的基本解释器以及类支持大约仅为40KB,加上基础的标准类库和对线程的支持(一个自含的微内核)大约仅需增加175KB。Java是一个纯的面向对象语言,所有功能和数据都包含在类中,通过类和访问修饰符体现封装性,通过类扩展父类的特征体现继承性,通过接口实现体现多态性。Java有一个扩展的例程库,用于处理TCP/IP、HTTP、FTP等网络访问,Java程序能够通过URL打开和访问网络上的对象,就像处理本地文件系统一样。J2EE是Java社区支持大规模分布式应用开发的独立的软件体系结构。Java的设计目标从多方面保证了用Java编写的程序的可靠性,包括早期的问题检测和后期的运行时检测。Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。Java适用于网络和分布式的环境,在安全方面投入了很大的精力,使用Java可以构建防病毒和防篡改的系统。如禁止运行时堆栈溢出,禁止在自己的处理空间之外破坏内存,未经授权禁止读写文件等。Java通过将Java程序编译成与体系结构无关的中间目标文件(字节码文件)并通过虚拟机运行中间目标文件实现体系结构中立的特点。精心设计的字节码不仅可以很容易地在任何机器上被解释执行,还可以迅速地翻译成本地机器的代码。通过虚拟机运行还有一些其它优点,如虚拟机可以检测指令序列的行为,以增强其安全性。Java规范中没有“依赖具体实现”的地方,基本数据类型的大小以及有关算法都做了明确的说明。Java解释器可以在任何移植了解释器的机器上执行Java字节码。字节码还可以在运行时通过即时编译器(JIT编译器)被快速翻译成运行该应用程序的特定CPU的机器码。多线程可以带来更好的交互响应和实时行为。Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时刻类型信息十分直观。当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。如从Internet上下载代码,然后在浏览器上运行和必须在运行时分析对象的系统,比如JavaGUI构建器、智能调试器、可插入组件以及对象数据库。
2Java虚拟机(JVM)
Java虚拟机可以指一个抽象规范,也可以指一个针对JVM规范的实现,还可以指启动运行的一个Java虚拟机实例。抽象规范是JVM实现者共同遵守的守贝IJ,具体实现可以来源于不同的提供商,可以是不同的体系结构,还可以是不同的操作系统平台。图2显示了Java虚拟机的内部体系结构。
Java虚拟机启动运行后,由类装载器子系统读取javaclass文件,并在内存中构建内存布局,运行时数据区主要包括方法区、堆、Java栈、PC寄存器和本地方法栈。方法区存放类数据,主要包括类型信息,动态创建的对象存放在堆中,当一个线程被创建时,会给它分配一个Java栈和PC寄存器,当执行Java方法时,PC寄存器指向下一条要执行的字节码指令,Java栈存放该线程中Java方法调用的状态一包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中间结果等等。本地方法调用的状态,则依赖于具体的实现存放在本地方法栈中。
Java栈由许多栈帧(stackframe)或帧(frame)组成,一个栈帧包含一个Java方法的调用状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中;当该方法返回时,这个栈帧被从该线程的Java栈中弹出并抛弃。Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。这样设计使JVM的指令集尽量紧凑,同时也便于Java虚拟机在那些只有少量通用寄存器的平台上实现。另外,Java虚拟机这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。各线程的Java栈内存区是私有的,任何线程都不能访问另一个线程的PC寄存器和Java栈。
4字节码及JavaClass文件
Javaclass文件是对Java程序二进制文件格式的精确定义。每一个Javaclass文件都对一个Java类或者Java接口作出了全面描述。一个Javaclass文件只能有一个类或者接口。无论Javaclass文件在何种系统上产生,无论Java虚拟机在何种系统上运行,对Javaclass文件的精确定义使得所有Java虚拟机都能够正确地读取和解释所有Javaclass文件。
class文件的版本也是随着JDK的版本演进而演进的,查看Javaclass文件的版本号,可以看Javaclass文件的第5〜8个字节。其中5、6字节为次版本号,7、8字节为主版本号。比如由版本号为1.6.0_10的javac生成的class文件,次版本号为0,主版本号为50。Javaclass文件的结构如图3所示。
ClassFile{
u4magic;u2minor_version;u2major_version;u2constant_pool_count;
cp_infoconstant_pool[constant_pool_count-1];
u2access_flags;u2this_class;u2super_class;u2interfaces_count;u2interfaces[interfaces_count];u2fields_count;field_infofields[fields_count];u2methods_count;
method_infomethods[methods_count];u2attributes_count;
attribute_infoattributes[attributes_count];
}
图3Javaclass文件结构
Java字节码文件结构是一个复杂的数据结构,Javaclass文件是8位字节的二进制流。数据项按顺序存储在class文件中,相邻的项之间没有任何间隔,这样可以使class文件紧凑。占据多个字节空间的按照高位在前的顺序分为几个连续的字节存放。和Java类可以包含多个不同的字段、方法、方法参数和局部变量一样,Javaclass文件也能够包含许多不同大小的项。
在class文件中,可变长度项的大小和长度位于其实际数据之前。这个特性使得class文件流可以从头到尾被顺序解析,首先读出项的大小,然后读出项的数据。
5Java类库
Java类库是Java程序设计人员最喜欢最离不开的工具,Java类库是一个庞大的库结构。java.lang.Object类是Java类库层次结构中的根,所有的类、数组等都继承Object类的方法。随着技术的发展,Java类库也是不断扩展的。目前从JDK1.6.0的API文档来分析,共有200余个包。按照相关功能划分,Java类库大致可以分为以下几类:
1)基础、工具类
2)管理控制类
3)图形相关类
4)网络处理相关类
5)文件IO相关类
6)安全相关类
7)WebServices相关类
8)数据库操作相关类
9)CORBA相关类
10)W3C相关类
11)Applet相关类
12)组件框架相关类
6Java社区与Java技术的发展趋势
随着网络的普及和Java技术的日益成熟,采用Java技术来开发应用程序和信息系统越来越多,造就了庞大的Java开发队伍。为了能够更快速的开发出高质量的应用系统,在Java技术领域,涌现出很多很好的Java技术框架,如Struts、Spring、Hibernate等。这些Java技术框架的出现,又进一步推动了Java技术的普及和发展。
随着网络的普及,网格计算、普适计算、服务计算、云计算、多核、众核等新兴计算技术的发展,对Java技术的发展也产生了积极的推动作用。在Java技术的框架中,Java语言、Java虚拟机、Java库、Java字节码文件等也会针对新技术的发展而作出相应的变革。Java语言是否要适应多核和众核的并行编程模式;Java虚拟机是否要充分利用多核的资源,加速Java程序的执行,优化垃圾回收算法,支持事务存储等;Java本地库是否要适应多核和众核的环境;Java类库已经在WebService编程方面作出了积极的努力,推动了服务计算技术的发展;Java字节码文件是否增加新的内容以适应新技术的发展呢;Java在对象数据库开发方面如何提供支持;由于Java技术框架的特点,在高性能计算方面,Java—直没有好的表现。然而Java在HPC方面的努力一直没有停止过。
7小结
Java技术是目前流行的、最广泛采用的软件开发技术,但很多人只是从Java程序设计语言的角度理解Java技术,缺乏对Java技术框架的全面认识。本文针对Java的整体技术框架进行了概述,阐述了Java程序.
4结语
在本文中,改进的全局K均值算法解决了聚类分析时的问题,不仅可以利用最小目标函数来解决初始中心问题,还可以避免孤立点的问题。马氏距离有效地消除错误数据的样本数据,从而减少了计算量。因为动态模糊神经网络是不容易获得的梯度信息,网络培训时间太长,结构复杂等缺点,减法聚类用于简化网络结构,并把改进PSO算法用于优化网络参数,避免经验的盲目性和随意性。仿真结果表明,它优于传统的动态递归模糊神经网络,它需要更少的隐藏节点和参数,具有较高的预测精度和实用性。