作为一个Java程序员,了解jvm即Java虚拟机是一件很有必要的事。
说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:
运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。
以源代码文件为起点,开始整个Java程序的运行过程:
一般而言,我们自己写的Java程序是.Java文件,如下图这是我的贪吃蛇小游戏在计算机存储的格式,.Java文件在运行的时候,并不能被计算机所理解,换一句话来说,.java文件是我们人能够看懂的语言,二计算机只认识0和1,代码编译将本地机器码转化为字节码,也就是.class文件,Java编译器完成代码编译这项工作的时候,.class文件是计算机所能够理解的,但是不一定是计算机做能够运行的,所以需要类加载机制进行加载,然后在jvm的内存中运行,Java平台无关性的计时就在于这种字节码的运用,这篇文章我们将介绍Java的类加载机制,也就是将.class文件转化成为转化为jvm能够理解运行的语言,然后在内存分析中介绍加载后的语言怎么样在内存中进行存储和运行,最后介绍垃圾会后机制是如何将不用的变量和代码作为垃圾回收的。
jvm的类加载机制将Java程序的.class文件转化为加载到内存,并对数据进行校验,转换解析和初始化,最终编程能够被Java虚拟机直接使用的Java类型,
JVM的基本组成
(1)指令集:JVM指令集
(2)类加载器:在jvm启动时或者类在运行时将需要的class加载到JVM中
(3)执行引擎:负责执行class文件中的字节码指令,相当于CPU
(4)运行时数据区:将内存划分成若干个区,分别完成不同的任务
(5)本地方法区:调用C或C++实现的本地方法代码返回的结果
Jvm类加载器介绍以下几个模块:
- 类加载过程,加载,连接,初始化
- 类加载器的层次结构
- 类加载器的代理模式
(一)类加载全过程
(1)什么是类加载机制?
jvm将class文件加载到内存,并对数据进行校验,解析和初始化,最终形成jvm可以直接用来使用的Java类型语言的过程。
将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来