`
johnsonyang
  • 浏览: 2462 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

2011年之JAVA虚拟机深入了解(一)

阅读更多

(一)JAVA体系结构

一、 java体系结构可以分四个部分,独立但技术相关:
   1、java程序设计语言
   2、java class文件格式
   3、java应用编程接口(API)
   4、java虚拟机

   我们在学习编程的最初期通常会编写一个HelloWorld的小程序,刚学习编程时并不会去想为什么要进行javac来编译成class文件,然后通过java来运行这个程序,现在可以搞明白java执行程序时为什么要有这么个过程,首先我们会写一段代码,比如:HelloWorld.java这个程序代码,我们通过调用javac 进行代码的解析,把这段JAVA代码翻译成java虚拟机能够识别的二进制代码,就是HelloWorld.class这个文件,然后通过java命令来执行这个二进制代码文件,其中我们会通过java应用编程接口来调用来访问系统资源(不如I/O的调用),实现了程序中的逻辑。可以根据下图(1-1)直观的认识:
   
  java虚拟机主要是负责class文件的加载并执行其中的字节码,它可以从程序以及API中装载class文件,其中API只有程序执行需要的类才会被装载。
   字节码由执行引擎来执行。由软件实现的执行引擎分为三种:1、一次性解释字节码,这个是最简单的执行引擎。2、第一次解释字节码的时候,会把解释出来的本地机器代码缓存在本地,在以后的执行中可以重用,当然这样就很耗费内存。3、按需把解释出来的字节码,监视程序的执行情况,将经常使用的缓存到本地,不常用的依然由虚拟机进行解释执行,这种虚拟机通常是内嵌在芯片当中。
二、 java有两种方法,一种是java程序中的方法,还有一种就是本地方法。
    java程序通过调用本地方法来访问系统资源。java方法与系统无关,与平台无关,但本地方法却不是。如下图可以看出java方法与本地方法的关系。

从图中可以看出,本地方法是连接java和主机底层服务的桥梁。(通过JNI来访问本地方法)
这样看视乎跟java的平台无关性相矛盾,所以java又提供了另一种方式与本地主机交互,就是通过javaAPI来访问主机资源,这样就实现了平台的无关性,当然有时为了安全也可以编写一个与平台相关的程序来访问特定主机上的内容。
三、类装载器体系结构
    java的类装载器分为两种:启动类装载器和用户定义的类装载器
    启动类装载器是java虚拟机实现的一部分,如果一个java虚拟机在已有操作系统上实现为C语言,则启动类加载器就会是C语言的一部分,启动类加载器通常是使用某种默认的方式从本地机器上加载类以及javaAPI要使用的类。
    用户自定类装载器,是运行在java可执行代码中的一部分,可以被实例化。
   

  • 大小: 68.3 KB
  • 大小: 27.3 KB
  • 大小: 24 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics