JVM从零开始:Java体系结构--认识Java(一)

530 阅读6分钟

原文地址:www.sudo.ren/article/75?…

1.认识Java

根据不同的技术规范,Java划分为3中结构独立但又相互依赖的技术分支:Java SE(标准版)、Java EE(企业版)、Java ME(精简版)

Java SE:活跃在桌面领域,主要包含Java API组件。

Java EE:活跃在企业级领域,主要包含Java API组件、Web组件、事务组件、分布式组件、EJB组件、消息组件;综合这些技术开发人员完全可以构建出一个具备高性能、结构严谨的企业级应用,并且Java EE也是构建SOA架构的首选平台。

Java ME:活跃在嵌入式领域,称为精简版是因为JavaME仅保留了Java API中的部分组件,以及适应设备的一些特有组件。

Java的发展,除了来自互联网的崛起,还有Google选择Java作为Android操作系统(手持移动设备、嵌入式设备、个人电脑。。。)的应用层编程语言有关。

(1)与生俱来的优点

体系结构中立 :

Java源代码的默认编译结果并不是可执行代码(本地机器指令),而是具有平台通用性的字节码;实现了“一次编译,处处运行”,并且只能在java虚拟机中运行,与物理宿主环境隔离。

安全性优越 :

因为java字节码只能在java虚拟机中运行,与物理宿主环境隔离,实现了安全模型,有助于防止错误发生,增强程序的可靠性。同时,Java的废弃指针操作,自动内存管理,数组边界检查,类型转换检查,线程安全机制和物理环境访问限制等语法限制也保证了程序的安全。

多线程 :

Java使用多线程的并发机制将任务进行分散,而不是全部集中在主线程内,采用异步的方式并发执行多项任务,具有极高的执行效率。

分布式 :

Java与生俱来对分布式技术的支持比较完善,充分利用分布式环境中的每一个节点去协同处理任务,具有高效的执行效率,还能有效降低单机负载以及提升稳定性和可用性。(如:RMI--Java远程方法调用,JMS--Java消息服务)丰富的第三方开源组件 :随处可见成熟的第三方开源框架。

(2)语法结构和对象模型

Java继承了C语言的语法结构,并改编了C++的对象模型。 类是Java最基本的封装单元,所有的操作都发生在类中; 属性和方法构成了一个简单的类,属性用于定义对象的各种“器官”,而方法用于定义对象的一系列“行为”。 在类内部,我们可以定义很多元素特征,统称为类成员,Java的一些基本类元素信息如下: 关键字; 标识符 操作符(空白分隔符、普通分隔符); 注解(@Annotation类型、描述类型); 数据类型(原始数据类型、引用类型); 属性(常量、变量); 运算符和表达式; 控制语句(流程控制语句、循环控制语句); 异常处理; 方法体; 在语法层面上,开发人员可以在程序中直接使用 new关键字创建对象,并返回当前对象的一个引用(reference)。要注意,Java中的引用绝不等价于C++中的指针,因为引用类型的变量持有的仅仅只是一个引用而已非实际值,也就是说不能直接与对象打交道,而必须通过引用进行“牵引”,在程序中,即便不存在对象实例,引用也允许独立存在,也就是说可以声明一个引用,不一定要与对象关联,但务必确保在真正使用一个对象时,它已经完成了初始化操作。(如下图)

(3)历史版本追溯

1991年: Sun公司的James Gosling(Java语言主要创始人,Java之父)等人为嵌入式设备开发了一种叫Oak的语言,没有引起大多数人注意;
1994年:随着互联网和3W的发展,他们使用Oak编写了一个叫做HotJava的浏览器,得到Sun公司首席执行官的支持;
1995年:为了促销和法律的原因,Oak正式更名为Java,同年Sun发布了Java1.0版本,并提出了“Write Once,Run Anywhere”(一次编译,出处运行)的口号。Java1.0 功能并不多,只有JDK配套的纯解释器实现Java虚拟机(Sun Classic VM),Applet,AWT等技术。
1997年:Java1.1发布,在Java1.0的基础上,添加了JDBC、JAR格式支持、JavaBeans、RMI等技术,并在语法上开始支持反射和内部类等操作。
1998年:Java1.2发布,将Java划分为3种结构独立却彼此依赖的技术体系分支,分别是J2SE(标准版)、J2EE(企业版)、J2ME(精简版),在这个版本中添加了EJB、Java Plug-in、Java IDL、Swing等技术,并且Sun公司首次在JDK中内置了JIT编译器。
2000年:Java1.3发布,没有引进太多的技术和改变,只是在基础类库上做了改进。
2002年:Java1.4发布,引进了相当多的特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等,意味着Java开始走向成熟。
2005年:Java1.5发布,同时也是在1.5版本发布后,后续的Java版本都改为以Java5、Java6、Java7等规则进行命名。在早期中Sun公司对Java各版本的语法改变并不大,但1.5版本针对语法层面的改进相当多,几乎导致整个API都发生了变化。比如自动装箱/拆箱、泛型、枚举、@Annotation、可变长参数、foreach、粗粒度的并行模型等。
2006年:Java6发布,改变更多是体现在虚拟机内部,主要以同步对象锁、垃圾回收、类型装载等方面的算法更新为主。同年Sun公司正式宣布Java以GPL(General Public License)v2的开源协议进行源代码公开,并建立了OpenJDK对Java的源代码库进行独立管理。
2010年:由于Sun公司无力推动Java7的研发工作,正式被Oracle公司收购,并接替Java7的后续研发。由于Java7预期的功能非常多,不得不导致Oracle将部分功能进行裁剪,延迟到Java8的版本中再进行发布。Java7在语法层面上做了较大的改变,还引入许多新技术,比如更新了Java的文件系统、细粒度的Fork/Join并行编程、混合语言等;同时Java虚拟机内部也做了许多改进和调整,比如Java7提供了G1垃圾收集器、类装载器的并行装载增强实现等。