JVM与GC原理

server/2024/11/13 11:07:56/

JVM运行流程

Java 虚拟机(Java Virtual Machine,JVM)是 Java 平台的核心组件之一,它是一个在实际硬件和操作系统上模拟运行 Java 字节码的虚拟计算机

Java 程序被执行的顺序通常包括以下几个步骤:

  1. 编辑(Edit):程序员编写 Java 源代码文件(.java 文件),其中包含类、方法、变量等定义。

  2. 编译(Compile):使用 Java 编译器(javac)将源代码文件编译成字节码文件(.class 文件)。编译过程将源代码文件转换为平台无关的字节码。

  3. 加载(Load):Java 虚拟机(JVM)加载字节码文件到内存中,并对字节码进行验证、准备和解析等操作。

  4. 链接(Link):在链接阶段,JVM 将字节码文件中的符号引用转换为直接引用,并生成可执行代码。链接包括三个子阶段:

    • 验证(Verification):确保字节码文件符合 Java 虚拟机规范,防止恶意代码和错误代码对系统造成损害。
    • 准备(Preparation):为类的静态变量分配内存空间,并设置默认初始值。
    • 解析(Resolution):将符号引用转换为直接引用,即将类、方法、字段等在内存中的地址解析出来。
  5. 初始化(Initialization):在初始化阶段,JVM 执行类的初始化代码,对静态变量赋初值,并执行静态代码块。初始化阶段是类加载过程中的最后一个阶段,只有在初始化之后,类才能被真正使用。

  6. 执行(Execution):JVM 执行程序的主方法(main() 方法),从 main() 方法开始执行程序的主要逻辑。程序的执行顺序由代码中的逻辑和控制流程决定,可以包括方法调用、条件语句、循环结构等。

以上是 Java 程序执行的一般顺序,每个步骤都是逐步进行的,直到程序完全执行结束。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

GC

垃圾回收(Garbage Collection,GC)是 Java 虚拟机(JVM)自动管理内存的重要功能,它负责在运行时识别和清除不再使用的对象,以释放内存空间。以下是 GC 的核心知识点:

  1. 对象的生命周期:了解对象的生命周期是理解 GC 的基础。当一个对象被创建后,它会被分配在堆内存中。当对象不再被引用时,它变成了不可达对象,这时候就可以被垃圾回收器识别和回收。

  2. 引用类型:在 Java 中,对象之间的引用可以分为强引用、软引用、弱引用和虚引用等几种类型。不同类型的引用影响着对象的生命周期和垃圾回收行为。

  3. 垃圾回收算法:垃圾回收器使用不同的算法来识别和回收内存中的不再使用的对象。常见的算法包括标记-清除算法、复制算法、标记-整理算法和分代收集算法等。

  4. 垃圾回收器:Java 虚拟机中有多种垃圾回收器,如串行回收器、并行回收器、并发回收器和 G1 回收器等。不同的回收器适用于不同的场景和需求,可以通过 JVM 参数进行配置和选择。

  5. GC 日志分析:GC 日志记录了垃圾回收器的执行情况,包括回收的对象数量、回收时间、停顿时间等信息。通过分析 GC 日志可以了解程序的内存使用情况和垃圾回收性能,进而优化程序的内存管理和性能。

  6. 调优策略:根据实际场景和需求,需要选择合适的垃圾回收器和调优策略。常见的调优手段包括调整堆大小、选择合适的垃圾回收器、减少对象的创建和引用、优化程序逻辑等。

以上是 GC 的核心知识点,理解这些知识可以帮助开发者更好地理解 Java 内存管理机制,优化程序的性能和内存利用率。

在这里插入图片描述

在这里插入图片描述
在 Java 虚拟机中,堆内存(Heap)被划分为不同的区域,其中包括新生代(Young Generation)、老年代(Old Generation)等。这些区域主要用于管理对象的生命周期和执行垃圾回收。以下是对新生代和老年代的介绍:

  1. 新生代(Young Generation)

    • 新生代是堆内存的一部分,用于存放新创建的对象。
    • 新生代通常被进一步划分为 Eden 区和两个 Survivor 区(From 和 To 区)。
    • 大多数对象首先分配在 Eden 区,当 Eden 区满时,会触发 Minor GC,将存活的对象移动到 Survivor 区。
    • Survivor 区用于存放经过一次或多次 Minor GC 后仍然存活的对象。在多次 Minor GC 过程中,存活的对象会从一个 Survivor 区移动到另一个 Survivor 区,直到最终被移动到老年代或被回收。
  2. 老年代(Old Generation)

    • 老年代用于存放长期存活的对象和从新生代晋升过来的对象。
    • 当一个对象经过多次 Minor GC 后仍然存活,它会被晋升到老年代。
    • 当老年代的空间不足时,会触发 Full GC(Major GC 或 Full Garbage Collection),对整个堆进行垃圾回收。
    • Full GC 的触发频率相对较低,因为它会导致停顿时间较长,影响程序的性能。

新生代和老年代的划分使得 Java 垃圾回收更加高效,因为大部分对象的生命周期较短,很快就会被回收,而只有少部分对象会进入老年代,减少了 Full GC 的频率。优化堆内存的分配和垃圾回收策略,可以提高 Java 程序的性能和稳定性。

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/server/2772.html

相关文章

rman 归档备份 archived log 不重复备份

11.2.0.3数据库环境,使用rman进行归档日志备份,想实现: (1)每天备份归档日志,备份完并不删除归档日志 (2)归档日志备份成功一次之后,下次再备份的时候rman就自动不会再次备份这个归档日志 这个需求可以通过 backup …

数字IC/FPGA——锁存器/触发器/寄存器

本文主要介绍以下几点: 什么是触发器和锁存器门电路和触发器的区别什么是电平钟控触发器电平钟控触发器触发器和锁存器的区别触发器的分类方式:逻辑功能、触发方式、电路结构、存储数据原理、构成触发器的基本器件寄存器利用移位寄存器实现串并转换或并…

探索Web3的奇迹:数字时代的新前景

在数字化时代的潮流中,我们不可避免地迎来了一个全新的篇章——Web3时代的到来。在这个时代中,区块链技术作为数字化世界的核心,正在重塑着我们的生活方式、经济模式以及社会结构。在Web3时代,我们将目睹着一个以去中心化、透明化…

台州中墙建材常见的砖胎膜质量问题有哪些?以及施工安全

台州中墙建材常见的砖胎膜质量问题有哪些?以及施工安全砖胎膜的常见质量问题包括墙体倒塌、砂浆不饱满、通缝现象等。 在施工过程中,砖胎膜可能面临的一些质量问题有: 墙体倒塌:如果砌筑时未严格按照规范进行操作,或…

良心无广的4款软件,每一款都逆天好用,且用且珍惜

闲话少说,直上干货! 清浊 清浊是一款异常强大的国产手机清理应用,其设计理念崇尚简洁,用户界面清晰明快,且无任何弹窗广告干扰。更难能可贵的是,这款应用提供全程免费服务,功能多样&#xff0…

pytorch框架下的逻辑回归代码解读

# -*- coding: utf-8 -*- """ # file name : lesson-05-Logsitic-Regression.py # author : tingsongyu # date : 2019-09-03 10:08:00 # brief : 逻辑回归模型训练 """ import torch import torch.nn as nn import matplotlib.…

详解汽车交流充电桩主板的四大版本

近年来,在电动汽车行业快速发展背景下,充电桩的建设变得愈发重要,特别是兼容性较高、适用性较广的交流充电桩。 交流充电桩的心脏——主板的设计与功能,对于充电桩的性能和用户体验起着至关重要的作用。目前,市面上的…

股票价格预测 | Python使用GRU预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 Python使用GRU预测股票价格 代码设计 import pandas as pd import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from numpy