JVM系列(一)JVM基础知识

83 阅读4分钟

Java是一门跨平台的语言,这意味着程序可以在不同的硬件平台和操作系统上运行。Java虚拟机(JVM)是Java语言的核心部分,它是Java语言跨平台的实现方式。本文将介绍JVM的基础知识,包括JVM概念、组成部分、工作原理、以及如何优化JVM性能。

1、JVM概念

JVM是Java虚拟机的缩写,它是Java程序的运行环境,是Java的核心部分。JVM负责将编写的Java程序代码编译成Java字节码后,对字节码进行解释和执行。与其他的编译型语言不同,Java程序不是直接被转化为机器码,而是由JVM进行转化执行,JVM是Java语言跨平台的实现方式。

2、JVM的组成部分

image.png (1)类加载子系统:主要负责将字节码文件加载到JVM内存中,并进行验证、准备和解析等操作,最终生成JVM可执行的代码块。

2)运行时数据区:JVM内存在运行时数据区,包括方法区、堆、Java栈、本地方法栈,程序计数器等多个部分,这些部分共同实现了JVM运行时的存储和管理。

  • 方法区:用于存储已加载类的类型信息、静态变量、常量池等信息。
  • 堆:用于存储Java程序动态生成的对象实例数据。
  • Java栈:用于存储线程执行的方法,每个栈帧(Stack Frame)存储了方法的状态、局部变量表、操作数栈、动态链接、方法返回地址等信息。
  • 本地方法栈:与Java栈类似,用于执行Native方法。
  • 程序计数器:用于存储下一条即将执行指令的地址。

(3)执行引擎:主要通过指令集和执行引擎将字节码解释为可以运行的二进制代码。

(4)本地方法库:用于支持Native方法的执行。

(5)垃圾回收器:JVM对Java对象进行动态的内存管理,当内存达到一定阈值时,会自动进行垃圾回收。

3、JVM的工作原理

当我们运行Java类的时候,JVM首先会把类加载到它的运行时数据区的方法区中(又称类元数据区)。JVM中有启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)三种内置类加载器,在ClassLoader中定义了一套双亲委托模型来保证Java类的加载安全。在将Java类加载到内存区后,JVM会将类解释成字节码,并对字节码进行验证、准备和解析等操作,最终生成JVM可执行的代码块。字节码被送到执行引擎,执行引擎采用JIT编译技术将字节码编译为机器码执行。同时,JVM在运行时管理运行时数据区,包括Java栈、堆、程序计数器、本地方法栈等。

4、JVM性能优化

JVM的性能优化主要可以从以下两个方面入手:

(1)调整堆内存大小

Java程序运行时会在堆中存储对象实例,如果堆内存过小,可能会导致程序抛出OutOfMemoryError异常;如果堆内存过大,可能会导致程序运行缓慢。为了提高Java程序的性能,我们需要调整堆内存大小,使它在足够的内存空间下,运行更加高效。

(2)手动调整垃圾回收

JVM的垃圾回收机制本质上是自动的,但是手动调整垃圾回收策略也可以提高JVM的性能。我们可以通过JVM参数来调整垃圾回收机制,比如设置新生代和老年代的比例、设置垃圾回收的频率等。

此外,还可以通过JVM参数来调整执行引擎,如启用后台JIT编译、调整编译器阈值等。这些参数的调整可以帮助我们针对特定应用场景,达到更好的性能优化效果。

总结:JVM是Java语言于跨平台运行的核心部分,它的基础概念、组成部分、工作原理以及性能优化等知识点,可以帮助我们更好的理解JVM的内部运行机制,从而更好的优化Java程序的性能。虽然JVM内部逻辑比较复杂,但是我们可以通过加深对JVM内部机制的理解,来提高Java程序的运行效率和性能。