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

原文地址:https://www.sudo.ren/article/75?t=1573783304063

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垃圾收集器、类装载器的并行装载增强实现等。


评论区

JFinal

2019-11-17 15:49

Java 诞生很多年,有少人已不了解其发展历程,谢谢分享

热门分享

扫码入社