Java虚拟机学习笔记(一)Java体系结构

一、体系结构组成

当编写并运行一个Java程序时,就同时体验了这四种技术。用Java语言编写源代码,马它编译成Java Class文件,然后再在Java虚拟机上运行class文件。当编写程序时,通过调用类中的方法来访问系统资源。当程序运行的时候,它通过调用class文件中的方法来满足程序的Java API调用。

  1. Java程序设计语言
  2. Java Class文件格式
  3. Java应用编程接口
  4. Java虚拟机

软件实现的Java虚拟机如图:

二、Java虚拟机
  1. Java虚拟机的主要任务是装载class文件并执行其中的字节码。JVM包含一个类装载器,它可以从程序和API中装class文件。Java API中只有程序执行时需要的那些类才会被装载。
  2. 当JVM是由主机操作系统上的软件实现的时候,Java程序通过调用本地方法(native方法)和主机交互。Java中有两种方法:
    • Java方法:由Java语言编写的,编译成字节码,存储在class文件中,是平台无关的;
    • 本地方法:由其它语言(C,C++或汇编语言)编写的,编译成和处理器相关的机器代码,保存在动态链接库中,格式是各个平台专有的,是平台相关的;当编写一个平台独立的Java程序时,必须遵守的一条最重要的原则就是:不要直接或间接调用不属于Java API的本地方法;一个平台无关的Java程序如图:
      Java虚拟机学习笔记(一)Java体系结构
    • 运行中的程序调用本地方法时,JVM装载包含这个本地方法的动态库,并调用这个方法;
三、类装载器
  1. 一个Java应用程序可以使用两种类装载器:"启动"(bootstrap)类装载器和用户自定义的类装载器。启动类装载器(这是系统中唯一的)是JVM的一部分。
  2. Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类,例如从网络下载class文件。
  3. 用户定义的类装载器使得在运行时扩展Java应用程序成为可能。当它运行时,应用程序能够决定它需要哪些额外的类,能够决定是使用一个或是更多的用户定义的类装载器来装载。由于类装载器是使用Java编写的,所以能用任何在Java中可以表述的风格来进行类的装载。这些类可以通过网络下载,可以从某些数据库中获取,甚至可以动态生成。
  4. 每一个类被装载的时候,JVM都监视这个类,看它到底是被启动类装载器还是被用户定义类装载器装载。当被装载的类引用了另外一个类时,JVM就会使用装载第一个类的类装载器装载被引用的类。这样,两个类就动态地建立起了联系。
  5. 由于JVM采取这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。被不同的类装载器装载的类存放在不同的命名空间中,它们不能互相访问,除非应用程序显式地允许这么做。通过这种方法,就能够使用Java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问和破坏善意代码的权限。
  6. Java类装载器体系结构如图:
    Java虚拟机学习笔记(一)Java体系结构
四、Java独有的特性
  1. 在Java中没有通过使用强制转换指针类型或者通过进行指针运算直接访问内存的方法;
  2. Java避免无意间破坏内存的另一个办法是自动垃圾收集;在Java中,只需要停止对一个对象的引用,一段时间后,垃圾收集器会自动回收这个对象所占用的内存;
  3. Java在运行时保护内存完整性的第三个办法是数组边界检查;
  4. 最后一个关于Java确保程序健壮性的例子是对对象引用的检查,每次使用引用的时候,Java都会确保这些引用不为空值;

你可能感兴趣的:(java,jvm,数据结构,虚拟机,网络应用)