深刻Java虚拟机(1)——Java体系结构

转载: 深刻Java虚拟机(1)——Java体系结构

Java体系结构

Java体系结构包括四个独立但相关的技术:

1. Java程序设计语言

2. Java class文件格式

3. Java应用编程接口(API)

4. Java虚拟机

当编写并运行一个Java程序时,就同时使用了这四种技术。用Java程序设计语言编写源代码,把它编译成Java class文件,而后在java虚拟机中运行class文件。当编写程序时,经过调用实现了Java应用编程接口(API)类中的方法来访问系统中资源如io、网络内存等。当程序运行的时候它能够调用class文件中的实现的方法来知足程序java api的调用。

1、Java虚拟机

Java的面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱:平台无关性、安全性和网络移动性。java

Java虚拟机是一台抽象的计算机,其规范定义了每一个Java虚拟机都必须实现的特性,可是为每一个特定实现都留下了不少选择。c++

Java虚拟机的主要任务是装载class文件而且执行其中的字节码。装载类由类装载器(class loader)完成,它能够从程序和API中装载class文件。JavaAPI中只有程序执行时须要的那些类才会被装载。字节码由执行引擎来执行。编程

Java虚拟机中的三种执行引擎

一、最简单的执行引擎就是一次性解释字节码

二、另外一种执行引擎更快,可是也更消耗内存,叫作“即时编译器”(just-in-time compiler)

三、第三种执行引擎是自适应优化器

第二种比第一种执行引擎效率上要高不少,执行速度也更快,但相对的缺点就是内存消耗很大。当内存消耗剧烈的时候,jvm就会出现异常。在这种状况下,即时编译器第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码也会被缓存,当方法之后被调用时候能够重用。bootstrap

第三种引擎,自适应优化器,在这种方法里,虚拟机开始的时候解释字节码,可是会监视运行种的程序的活动,而且记录下使用最频繁的代码段。程序运行时,虚拟机只把那些活动最频繁的代码编译成本地代码,其余代码因为使用的并不很频繁,继续保留字节码由虚拟机继续即时它们。一个自适应的优化器可使用java虚拟机种的80%-90%的时间里执行被优化的本地代码,而只须要编译10%-20%对性能有影响的代码。api

Java虚拟机与主机交互

当java虚拟机是由主机操做系统上的软件实现的时候,java程序经过调用本地方法native mehod 和主机进行交互。java中有两种方法,java方法和本地方法。java方法是由java语言编写,以后编译成字节码,存储在class文件中的。本地方法是由其余语言好比c\c++\汇编语言编写的,编译器和处理器的相关代码。缓存

Java虚拟机上的类装载器

在Java虚拟机上,存在着多个类装载器,一个java应用程序可使用两种类装载器,启动bootstrap类装载器和用户定义的类装载器。启动类装载器是java虚拟机实现的一部分。启动装载器一般使用默认的方式从本地磁盘中装载类,包括java api类。启动类装载器也被叫作原始类装载器、系统类装载器或者默认类装载器。安全

2、Java class 文件

Java class文件是一个能够跨平台的二进制文件,是经过java虚拟机来实现编译的。网络

平台无关性:一般状况下,一个平台上的二进制可执行文件不能在其余平台上工做。而Java class文件是能够运行在任何支持Java虚拟机制硬件平台和操做系统上的二进制文件。多线程

网络适应性:class文件设计的紧凑,所以它们能够快速地在网络上传送。其次因为Java程序是动态连接和动态扩展的,class文件能够在须要的时候才下载。jvm

3、Java API

Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。Java API是相对安全的,它是保证平台无关性的前提,由于Java虚拟机和Java API class文件是任何Java平台都要实现的必要部分。在一个平台可以支持Java程序之前,必须在这个特定平台上明确地实现API的功能。

4、Java程序设计语言

尽管Java是为网络而生的,但许多人使用Java写程序还多是由于想要利用Java程序设计语言的优点:

1.面向对象
2.多线程
3.结构化错误处理
4.垃圾收集
5.动态链接
6.动态扩展

参考书籍:《深刻Java虚拟机 第二版》

相关文章
相关标签/搜索