jvm-初探

时间:2023-03-09 04:45:20
jvm-初探

目录

  1,Java体系结构

  2.jvm执行引擎

  3,ClassLoader的体系结构

  4,java class文件

概述

  其实,学java不算新手了,但是却感觉很多基本的知识,我们一开始也许是记住而不深究,我觉得有一些概念,还是需要了解.

  我们所说的java程序,需要jvm,java api,java class的辅助才能运行.我们从下面的图片可以看到,JDK,JRE,java api和JVM以其他们之间的关系:jvm-初探

  也就是说,JDK>JRE>Java api>JVM.

1,Java体系结构

  1)Java Language

  2)Java class文件格式

  3)Java应用程序接口(API)

  4)JVM

 当编写一个java程序并运行的时候,同时用到这4个技术:使用'Java Language'编写源代码->将它编译成'java class'文件->在'jvm'中运行该'class'文件.在编写程序时,通过调用类(这些类实现了java api)中的方法来访问系统资源(例如I/O).如图1-1:

jvm-初探

JVM的任务是装载 'class'文件,并运行其中的字节码.如图1-2,jvm中包含一个类装载器(class loader),它可以从程序和api中装载class文件.java api中只有程序运行时需要的那些类才会被装载.

jvm-初探

2.jvm执行引擎

  有4种执行引擎,分别为:

  1)一次性解释字节码.

  2)即时编译器(Just-in-time compiler),这种执行引擎比第一种的更快,但是也更消耗内存.在这种情况下,第一次被执行的字节码会被编译成本地机器码,编译出的本地机器码会被缓存,当方法以后被调用的时候可以重用.

  3)自适应优化器.在这种方法中,jvm开始的时候解释字节码,但是会监视运行中程序的活动,并记录使用最为频繁的代码段.程序运行的时候,jvm只把那些活动最为频繁的代码编译为本地机器码.而其他代码,由于使用不频繁,继续保留为字节码-由jvm继续解释它们.一个自适应优化器可以使得 jvm在 80%~90%的时间里执行被优化过的代码,而只需要编译10%~20%对性能有影响的代码.

  4)由硬件芯片构成,它由本地方法执行java字节码.这种执行引擎实际上是内嵌在芯片里的.

3,ClassLoader的体系结构

  用户定义的ClassLoader使得在运行时扩展java应用程序成为可能.当被装载的类引用了另外一个类的时候,jvm将使用装载第一个类的ClassLoader去装载被引用的类.如,jvm使用某一特定的ClassLoader装载Volcano这个类,而Volcano类使用一个叫Lava类(如调用Lava类的一个方法),那么jvm将使用装载Volcano这个类的ClassLoader去装载Lava.这样,被该ClassLoader返回的Lava类就动态地与Volcano类建立联系.由于jvm使用这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个ClassLoader装载的别的类.

  通过允许使用不同的用户自定义的类装载器装载不同来源的class文件,他们把不同来源的class文件放置在不同的命名空间中,它就能够限制或阻止不同来源的代码之间的相互访问.

4,java class文件

  java class文件主要在平台无关性和网络移动性方面使java更适应于网络.

  1)平台无关性)它为java程序提供独立于底层主机平台的二进制形式的服务.通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作(如用c/c++编写的程序).而java class文件是可以运行在任何支持jvm的硬件平台和操作系统上的二进制文件.

  当编译和链接一个c++程序的时候,所得的可执行二进制文件,只能在特定平台的和操作系统上运行,是因为这个二进制文件包含了目标处理器的机器语言.

  除了特定的处理器的机器语言之外,传统的二进制可执行文件的另外一个依赖性是具体平台的属性是整数的字节顺序.例如,在支持x86系列处理器的二进制可执行文件中,字节顺序是地位之前;而对于PowerPC处理器,则是高位在前.java class文件中字节顺序是高位在前(而与平台无关).

  2)网络移动性)class文件设计紧凑,所有可以快速在网络上传送.其次,java是动态链接和动态扩展,class文件可以在需要的时候才下载.