Java编程语言自从诞生起,就成为了一门非常流行的编程语言,覆盖了互联网、安卓应用、后端应用、大数据等很多技术领域,因此Java应用程序的性能分析和调优也是一门非常重要的课题。Java应用程序的性能直接关系到了很多大型电商网站的访问承载能力、大数据的数据处理量等,它的性能分析和调优往往还可以节省很多的硬件成本。

5.1  JVM基础知识

5.1.1  JVM简介

JVM是Java Virtual Machine(Java虚拟机)的英文简写,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java编程语言在引入了Java虚拟机后,使得Java应用程序可以在不同操作系统平台上运行,而不需要再次重新编译。Java编程语言通过使用Java虚拟机屏蔽了与具体操作系统平台相关的信息,保证了编译后的应用程序的平台兼容性,使得Java应用程序只需编译生成在Java虚拟机上运行的目标代码(字节码),就可以在不同的操作系统上部署和运行。Java虚拟机本质上可以认为是运行在操作系统上的一个程序、一个进程。Java虚拟机在启动后就开始执行保存在字节码文件中的指令,其内部组成结构如图5-1-1所示。

 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选-LMLPHP

图5-1-1

在JDK1.8(Java 8)及以后的版本中,JVM的内部组成结构发生了一些小的变化,如图5-1-2所示。

 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选-LMLPHP

图5-1-2

5.1.2  类加载器

类加载器(Class Loader)负责将编译好的.class字节码文件装载到内存中,使得JVM可以实例化或以其他方式使用加载后的类。类加载器支持在运行时的动态加载,动态加载可以节省内存空间,灵活地从网络上加载类,可以通过命名空间的分隔来实现类的隔离,增强了整个系统的安全性等。类加载器分为如下几种:

l启动类加载器(BootStrap Class Loader): 启动类加载器是最底层的加载器,负责加载JDK中的rt.jar文件中所有的Java字节码文件。如图5-1-3所示,rt.jar文件一般位于JDK的jre目录下,里面存放中Java语言自身的核心字节码文件。Java自身的核心字节码文件一般都是由启动类加载器进行加载。

 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选-LMLPHP

图5-1-3

l扩展类加载器(Extension Class Loader):负责加载一些扩展功能的jar包到内存中。一般负责加载<Java_Runtime_Home >/lib/ext目录或者由系统变量-Djava.ext.dir指定位置中的字节码文件。

l系统类加载器(System Class Loader):负责将系统类路径java -classpath或-Djava.class.path参数所指定的目录下的字节码类库加载到内存中。通常程序员自己编写的Java程序也是由该类加载器进行加载。

类加载器加载类的过程如图5-1-4所示,该图同时也描述了一个class字节码文件的整个生命周期。

 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选-LMLPHP

图5-1-4

本文作者:张永清,转载请注明:https://www.cnblogs.com/laoqing/p/15950682.html 来源于博客园

类加载器加载过程详细描述如表5-1所示。

表5-1 类加载器加载过程详细描述

03-02 02:45