《初步了JVM解》第1章

  

大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制,编译过程和如何对Java程序进行调优相信都会有一个很好的认知。

  

废话不多说,直接带大家来初步认识一JVM下。

     <李>      

JVM (Java虚拟机)是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域,它负责执行指令,还要管理数据,内存和寄存器。

  

看到这里,可能不懂JVM的人,已经蒙圈了。没关系、下面让我详细为大家介绍JVM的体系架构图,或许你会明白些。

  

简单来说,JVM就是一个虚拟计算机。我们都知道Java语言其中的一个特性就是跨平台的,而JVM就是Java程序实现跨平台的关键部分. Java编译器编译Java程序时,生成的是与平台无关的字节码(也就是* . class文件),所谓的平台无关是指编译生成的字节码无论是在窗口,Linux, Mac系统都是可执行。也就是说Java编译生成的* . class文件不是面向平台的,而是面向JVM的。不同平台上的JVM都是不同的,但是他们都是提供了相同的接口。图一为Java的大致运行步骤:

        《初步了JVM解》第1章”>
  
  </p> <p>图一
  <p>引用一个《疯狂Java讲义》中提到例子来帮助大家理解JVM的作用:</p>
  <p> JVM的作用就像有两只不同的铅笔,但需要把同一个笔帽套在两支不同的笔上,只有为这两支笔分别提供一个转换器,这个转换器向上的接口相同,用于适应同一个笔帽;向下的接口不同,用于适应两支不同的笔。在这个类比中,可以近似地理解两支不同的笔就是不同的操作系统,而同一个笔帽就是Java字节码程序,转换器角色则对JVM应。类似地,也可以认为JVM分为向上和向下两个部分,所有平台的JVM向上提供给Java字节码程序的接口完全相同,但向下适应的不同平台的接口则互不相同。</p>
  <ul类=   <李>      

上面我们是初步介绍了JVM的作用,那么要深入去了JVM解我们就需要了解JVM的体系结构,请看图二:

     《初步了JVM解》第1章”>
  
  </p> <p>图二
  <p>图二是JVM的体系架构图,接下让我们一起来聊一聊每一个部分都是什么意思。</p>
  <p>
  </p>
  <p>负责加载类文件,类文件在文件开头有特定的文件标示,将类文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且类加载器只负责类文件的加载,至于它是否可以运行,则由执行引擎决定。</p>
  <p> Java编译生成的* . class文件就是通过类加载器进行加载的,那么这里就会有几个问题:</p>
  <ul类=   <李>类加载器如何知道* . class文件就是需要加载的文件?李   <李>   

如果我手动将一个普通文件的扩展名称改后为类缀,类装入器会加载这个文件吗?

  <李>   

  问群:478052716免费领取(Java架构资料,视频资料,BATJ面试资料)

  

实际上,类文件在文件的开头是有特定的文件标识的,随便编写一个Java程序,编译生成一个类文件,打开后你都能看到如下内容:

     《初步了JVM解》第1章”>
  
  <p>咖啡馆宝贝就是类文件的一个标识,类加载器负责加载有咖啡馆宝贝的类文件,它将类文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时的数据结构并且类加载器只负责类文件的加载,至于它是否可以运行,则由执行引擎决定,请看图三:</p>
  
  
  <img src=《初步了JVM解》第1章