【深入浅出JAVA类加载和JVM】深入浅出JAVA类加载和JVM

来源:互联网 发布:神户钢铁篡改数据事件 编辑:程序博客网 时间:2024/05/20 17:41

我们在电脑上写好的一个Java文件(*.java)是怎样被JVM(Java虚拟机)加载和使用的呢?这样一个原理性的问题,如果要追根溯源,恐怕我说个三天三夜也说不完。我们本文的目的就如标题所讲--------深入浅出,力求简洁明了,你懂的。

1.有关JVM

JVM是Java语言的核心机制之一。英文全称Java Virtual Machine。是Java程序的字节码(*.class)的运行环境。同样也是Java语言跨平台运行的必要条件。可以说,正是由于JVM的存在,才造就了Java语言跨平台的特性

此话怎讲?JVM是java应用程序和操作系统(Unix,WinXP等)的中间层。java应用程序面对的是运行在具体操作系统上的JVM。我们不妨将JVM想象成翻译,我们(java应用程序)对翻译(JVM)说话,翻译会将话翻译给相应的外国人(具体的操作系统)。至于中间怎么翻译,我们可以不用理会。

[html] view plaincopy
  1. *.java----------------->*.class------------------>JVM--------------------->操作系统平台  

那么我们来简单了解一下这个翻译的过程。

JVM主要由类加载器(classLoader),字节码校验器,类解释器(InterPreter)组成。我们把前面的图再加工一下,你就能大致明白这三者在整个翻译过程中的作用。

                        

[javascript] view plaincopy
  1. *.class-------------------->类加载器----------------(a)--------------->字节码校验器-------------(b)---------->类解释器-----------(c)-------->操作系统平台  


注意,由上图我们能看出,类加载器在翻译过程中首先出场,然后是字节码校验器,最后类解释器登场,完成翻译工作。

对应注释,我们来详细了解下整个过程。

(a)类加载器读取java字节代码,并转换成java.lang.class类的实例。每个java类都维护这一个指向它的类加载器的引用。我们可以通过getClassLoader获取。

(b)字节码校验器检查.class文件内部结构,检查是否符合语言特征的编译规则。

(c)类解释器翻译成各相应平台的机器语言。

同时,JVM还在运行过程中进行着java安全性检查,比如类型安全的引用转化,GC,数组边界检查,NullPointer检查等。

总结来说,就是JVM屏蔽了底层运行平台的差别,实现了一次编译,随处运行。所以,Java是一种解释型语言。

0 0
原创粉丝点击