转载: 深刻Java虚拟机(1)——Java体系结构
Java的面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱:平台无关性、安全性和网络移动性。java
Java虚拟机是一台抽象的计算机,其规范定义了每一个Java虚拟机都必须实现的特性,可是为每一个特定实现都留下了不少选择。c++
Java虚拟机的主要任务是装载class文件而且执行其中的字节码。装载类由类装载器(class loader)完成,它能够从程序和API中装载class文件。JavaAPI中只有程序执行时须要的那些类才会被装载。字节码由执行引擎来执行。编程
第二种比第一种执行引擎效率上要高不少,执行速度也更快,但相对的缺点就是内存消耗很大。当内存消耗剧烈的时候,jvm就会出现异常。在这种状况下,即时编译器第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码也会被缓存,当方法之后被调用时候能够重用。bootstrap
第三种引擎,自适应优化器,在这种方法里,虚拟机开始的时候解释字节码,可是会监视运行种的程序的活动,而且记录下使用最频繁的代码段。程序运行时,虚拟机只把那些活动最频繁的代码编译成本地代码,其余代码因为使用的并不很频繁,继续保留字节码由虚拟机继续即时它们。一个自适应的优化器可使用java虚拟机种的80%-90%的时间里执行被优化的本地代码,而只须要编译10%-20%对性能有影响的代码。api
当java虚拟机是由主机操做系统上的软件实现的时候,java程序经过调用本地方法native mehod 和主机进行交互。java中有两种方法,java方法和本地方法。java方法是由java语言编写,以后编译成字节码,存储在class文件中的。本地方法是由其余语言好比c\c++\汇编语言编写的,编译器和处理器的相关代码。缓存
在Java虚拟机上,存在着多个类装载器,一个java应用程序可使用两种类装载器,启动bootstrap类装载器和用户定义的类装载器。启动类装载器是java虚拟机实现的一部分。启动装载器一般使用默认的方式从本地磁盘中装载类,包括java api类。启动类装载器也被叫作原始类装载器、系统类装载器或者默认类装载器。安全
Java class文件是一个能够跨平台的二进制文件,是经过java虚拟机来实现编译的。网络
平台无关性:一般状况下,一个平台上的二进制可执行文件不能在其余平台上工做。而Java class文件是能够运行在任何支持Java虚拟机制硬件平台和操做系统上的二进制文件。多线程
网络适应性:class文件设计的紧凑,所以它们能够快速地在网络上传送。其次因为Java程序是动态连接和动态扩展的,class文件能够在须要的时候才下载。jvm
Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。Java API是相对安全的,它是保证平台无关性的前提,由于Java虚拟机和Java API class文件是任何Java平台都要实现的必要部分。在一个平台可以支持Java程序之前,必须在这个特定平台上明确地实现API的功能。
尽管Java是为网络而生的,但许多人使用Java写程序还多是由于想要利用Java程序设计语言的优点:
1.面向对象
2.多线程
3.结构化错误处理
4.垃圾收集
5.动态链接
6.动态扩展