Java应用程序性能分析与调优实践,有哪些关键步骤和技巧?
摘要:Java编程语言自从诞生起,就成为了一门非常流行的编程语言,覆盖了互联网、安卓应用、后端应用、大数据等很多技术领域,因此Java应用程序的性能分析和调优也是一门非常重要的课题。Java应用程序的性能直接关系到了很多大型电商网站的访问承载能力
Java编程语言自从诞生起,就成为了一门非常流行的编程语言,覆盖了互联网、安卓应用、后端应用、大数据等很多技术领域,因此Java应用程序的性能分析和调优也是一门非常重要的课题。Java应用程序的性能直接关系到了很多大型电商网站的访问承载能力、大数据的数据处理量等,它的性能分析和调优往往还可以节省很多的硬件成本。
5.1JVM基础知识->关注清哥聊技术公众号,了解更多技术文章
5.1.1JVM简介
JVM是Java Virtual Machine(Java虚拟机)的英文简写,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java编程语言在引入了Java虚拟机后,使得Java应用程序可以在不同操作系统平台上运行,而不需要再次重新编译。Java编程语言通过使用Java虚拟机屏蔽了与具体操作系统平台相关的信息,保证了编译后的应用程序的平台兼容性,使得Java应用程序只需编译生成在Java虚拟机上运行的目标代码(字节码),就可以在不同的操作系统上部署和运行。Java虚拟机本质上可以认为是运行在操作系统上的一个程序、一个进程。Java虚拟机在启动后就开始执行保存在字节码文件中的指令,其内部组成结构如图5-1-1所示。
图5-1-1
在JDK1.8(Java 8)及以后的版本中,JVM的内部组成结构发生了一些小的变化,如图5-1-2所示。
图5-1-2
5.1.2类加载器
类加载器(Class Loader)负责将编译好的.class字节码文件装载到内存中,使得JVM可以实例化或以其他方式使用加载后的类。类加载器支持在运行时的动态加载,动态加载可以节省内存空间,灵活地从本地或者网络上加载类,可以通过命名空间的分隔来实现类的隔离,增强了整个系统的安全性等。类加载器分为如下几种:
l启动类加载器(BootStrap Class Loader):启动类加载器是最底层的加载器,由C/C++语言实现,非Java语言实现,负责加载JDK中的rt.jar文件中所有的Java字节码文件。如图5-1-3所示,rt.jar文件一般位于JDK的jre目录下,里面存放中Java语言自身的核心字节码文件。Java自身的核心字节码文件一般都是由启动类加载器进行加载。
图5-1-3
l扩展类加载器(Extension Class Loader):负责加载一些扩展功能的jar包到内存中。一般负责加载<Java_Runtime_Home >/lib/ext目录或者由系统变量-Djava.ext.dir指定位置中的字节码文件。
l系统类加载器(SystemClassLoader):负责将系统类路径java -classpath或-Djava.class.path参数所指定的目录下的字节码类库加载到内存中。通常程序员自己编写的Java程序也是由该类加载器进行加载。
类加载器加载类的过程如图5-1-4所示,该图同时也描述了一个class字节码文件的整个生命周期。
图5-1-4
本文作者:张永清,转载请注明:https://www.cnblogs.com/laoqing/p/15950682.html 来源于博客园
类加载器加载过程详细描述如表5-1所示。
表5-1类加载器加载过程详细描述
步骤
说明
加载
将指定的.calss字节码文件加载到JVM中
连接
将已经加载到JVM中的二进制字节流的类数据等信息,合并到JVM的运行时状态中,加载过程包括验证、准备、解析三个步骤
验证
校验.class字节码文件的正确性,确保该文件是符合规范定义的,并且适合当前JVM版本的使用。一般包含如下4个子步骤:
(1)文件格式校验:校验字节码文件的格式是否符合规范、版本号是否正确并且对应的版本是否是当前JVM可以支持的、常量池中的常量是否有不被支持的类型等。
(2)元数据校验:对字节码描述的信息进行语义分析,以确保其描述的信息符合Java语言的规范。
(3)字节码校验:通过对字节码文件的数据流和控制流进行分析,验证代码的语义是合法的、符合Java语言编程规范的。
(4)符号引用校验:符号引用是指以一组符号来描述所引用的目标,校验符号引用转化成为真正的内存地址是否正确
准备
为加载到JVM中的类分配内存,同时初始化类中的静态变量的初始值
解析
将符号引用转换为直接引用,一般主要是把类的常量池中的符号引用解析为直接引用
初始化
初始化类中的静态变量,并执行类中的static代码块、构造函数等。如果没有构造函数,系统添加默认的无参构造函数。
