深入理解JVM虚拟机(一):Java体系结构基本介绍

    这篇文章简单介绍了一下这些东西:Java虚拟机、Java class文件格式、Java应用编程接口(API)、Java程序设计语言。我们可以先大致了解Java的网络体系结构有哪些东西,具体是做什么的,关于这些东西的细节会在后期其他博客展开。

    这篇博客主要是对Java网络体系结构进行一个总体简单的介绍,之后的博客内容也主要围绕着这四个东西进行展开。对于《深入理解JVM虚拟机》这本书,我自己的学习目标就是学习并了解java程序的运行过程,一个java程序是如何运行起来的,个人能力有限,不过我会尽可能的把这本书的学习笔记做好。

目录

一、为什么使用Java

二、Java体系结构支柱

   2.1   平台无关性

   2.2   安全性

   2.3   网络移动性

三、Java体系结构

四、结论

 

一、为什么使用Java

    这个属于开放性问题,就随便说说了  

    1)Java语言具有跨平台性

        软件开发者面对的挑战之一是逐渐增长的以网络为核心的硬件环境,其包含的设备越来越广泛。一般网络都有很多不同的设备、不同的硬件体系、不同的操作系统,用于不同的用途。Java通过创建与平台无关的程序来解决这个问题。一个Java程序可以不需要修改就在很大范围内的计算机和设备上运行。和为一个特定的系统以及操作环境编译的程序比起来,用Java编写的平台无关的程序会更容易编写、管理和维护,代价更低。

                                                                                                      ——摘自《深入JVM虚拟机》1.2网络带来的机遇与挑战

    2)Java语言安全性很高

       Java程序源码需要先编译成字节码文件(即.class文件),而后才能被JVM虚拟机加载运行,这使得Java语言在安全性方面很高,如果不提供源代码或源代码注释,普通程序员可能要花上几年的时间才能够破解 Java系统源代码。

    3)Java具有广泛性且代码开源

      Java在某一个时间段,迅速发展成为了IT行业的主流,有许多的网站和软件选择了Java语言进行开发。当一个事物在世界的一个时间段里成为了一个主流,时间越长,它的应用范围就会越广泛。于此同时,庞大基数的程序员们不断发布着许多优秀的开源代码和库,使得Java的生命力变得十分强壮。

     虽然Java语言也存在着很多缺点,但是在Web开发领域,Java语言算得上是无冕之王。数量庞大的使用者们促使Java在不断的前进,形成了一个环境良好的生态圈。

二、Java体系结构支柱

    在介绍Java体系结构之前,我们先了解一下,什么是Java体系结构支柱?

                                那就是:平台无关性、安全性、网络移动性 

2.1    平台无关性

        平台无关性指的是:一种语言在计算机上的运行可以不受平台的约束,一次编译,到处执行。

       20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品如电视机顶盒、面包烤箱、移动电话等智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。

      由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak面向对象语言

                                                                                                                                                               ——摘自百度百科

    上面一段话中的Oak,就是Java的前身啦,最开始设计Java时,Java的定位就是一门跨平台的语言。Java最大的优势是它实现了:“一次编译,到处运行”的机制。而这样的机制是如何实现的呢?

                                                                  实现机制的关键就在于JVM虚拟机了。

     Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。如果需要在不同的平台上运行Java程序,则需要先实现对应平台的JVM虚拟机。JVM帮助Java语言屏蔽了底层的细节,使得Java在运行时,不需要考虑关于平台的因素,帮助Java解耦,实现了Java语言的平台无关性。

                                                           那么,Java虚拟机是如何帮助Java进行解耦的呢?

     其中,Java虚拟机规范定义了每一种数据类型的取值范围,但是却没有定义它们的位宽,即存储这些类型的值所需的展位宽度,位宽是由具体的虚拟机实现的设计者所决定的。java虚拟机和本地方法关联起来,通过本地方法来获取操作系统资源,来实现java虚拟机内class文件的需求,具体的位宽换算由虚拟机实现,所以Java程序在运行过程中,无需考虑平台的因素,因为底层细节都由虚拟机进行处理。

                                                             

2.2    安全性

    Java程序源码需要先编译成字节码文件(即.class文件),而后才能被JVM虚拟机加载运行,这使得Java语言在安全性方面很高,如果不提供源代码或源代码注释,普通程序员可能要花上几年的时间才能够破解 Java系统源代码。

2.3    网络移动性

        1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的AppletApplet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。IBMAppleDECAdobeHPOracleNetscape微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。

                                                                                                                                                            ——摘自百度百科

                                                                        Java技术在网络环境下非常有用

        其中一个关键的理由就是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台(Java的平台无关性)。这一点在网络化环境中尤为重要,因为大多数网络通常都是由各种各样不同种类的计算机和设备互联而成。

        比如,网络上可能连接了艺术创作部门的Macintosh计算机、工程部门的UNIX工作站以及随处叮见的运行Windows的PC。

        尽管这种情形下公司内部的各种计算机和设备可以共享彼此的数据,但是它仍然需要大量的管理工作。像这样一个网络,要求系统管理员必须随时维持运行于不同种类计算机上的同一个程序,在更新的时候,要根据特定于它所运行的不同平台进行版本同步更新。如果程序能够不加修改地运行于网络上的任何计算机,而不管该计算机是什么种类,那么这将极大地减轻系统管理员的工作。特别是当这样的程序是通过网络交付的时候,效果更加显著。

三、Java体系结构

 

                                                          

    Java体系结构包括四个独立但相关的技术:Java虚拟机、Java class文件格式、Java应用编程接口(API)、Java程序设计语言。

3.1 Java虚拟机

3.1.1 Java实现平台无关性的原理

   同2.1

3.1.2 Java虚拟机的主要任务

   主要任务:装载class文件并执行其中的字节码,帮助Java解耦。

3.1.3 Java虚拟机的组成部分

     

       类装载器:负责动态加载Java类到Java虚拟机的内存空间中。

       执行引擎: 解释和编译执行java代码。

3.2 Java应用编程接口(API)

    Java API(Application Programming Interface)是什么?

    是一些预先定义的函数,也是Java基本类库,例如java.util包,java.lang.String等等,都属于Java API。运行Java程序时,虚拟机会装载程序的class文件所使用的Java API class文件。所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。

    Java虚拟机和Java API一起组成了java的运行“平台”,也称为Java运行时系统,所有的Java程序都在平台上编译。

    Java API是运行库的集合,Java API的class文件会调用本地方法,提供了标准的调用接口,所以Java程序直接通过调用Java API对资源进行处理,而不直接调用本地方法,而这也是Java的平台无关性的支撑之一。

    注意:尽管JRE(Java Runtime Environment)是Java平台的一部分,但JRE不应与Java平台合并。原因是,Java平台是一般的东西,但JRE是一个SPECIFIC组件,就像JDK(Java Development Kit)一样。

    除了对平台无关性的推动之外,Java API在Java安全性模型方面也做出了贡献。当Java API的方法进行任何有潜在危险的操作(比如进行本地磁盘写操作)之前,都会通过查询安全管理器来检验是否得到了授权。安全管理器是一个为应用程序提供自定义安全策略的特殊对象。例如,安全管理器能够禁止对本地磁盘的访问。Java 1.2版本以前,如果应用程序通过调用Java API的方法来请求对本地磁盘进行写操作,那个API方法会首先请求安全管理器进行验证。当从安全管理器得知磁盘访问被禁止后,Java API会拒绝执行写操作。在Java1.2版本中,安全管理器的工作被访问控制器所取代。访问控制器是一个类,该类用来执行栈检验,以决定是否准许某种操作(考虑到向下兼容问题,安全管理器在Java 1.2版本中仍然存在)。通过强制执行安全管理器和访问控制器建立的安全策略,Java API促进了安全环境的建立,在这种安全环境中,可以运行具有潜在危险的代码。

                                                                                                                           ——摘自《深入JVM虚拟机》1.3.4 Java API

 3.3 Java class文件

    java class是一种二进制流文件,java程序通过编译,将内部信息转换为class文件,使其可以被JVM快速的加载至内存, 并且占据较少的内存空间。

    任务:为Java程序提供独立于底层主机平台的二进制形式的服务(通常情况下,一个平台的二进制可执行文件不能在其他平台上工作)

四、结论

    Java系统结构设计的核心并不仅仅在于使程序员更有效率,使程序更健壮,而在于为新兴的以网络为中心的计算环境提供了一种工具。Java系统结构为新的面向网络的软件结构铺出了一条道路,这种软件架构充分利用了Java对于代码和对象的网络移动性的支持。

                                                                                                                                   ——摘自《深入JVM虚拟机》1.5 结论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值