当前位置: 首页 > news >正文

JVM-GC 相关知识

问题1:什么是JVM?

问题2:JVM的内存区是如何划分的?(运行时数据区)


JVM 运行时数据区:堆、栈、方法区(JDK8之前是 永久代实现的,之后就是元空间了)、程序计数器。其中堆和方法区是线程共享数据。

在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在上分配。

是垃圾回收管理器管理的主要区域。

GC: 垃圾回收机制

1、什么是垃圾回收机制(什么是GC?)

程序在运行的时候会产生大量的内存垃圾,为了确保运行是的性能,JVM在程序运行过程中,不断的进行自动的垃圾回收(GC)。

1.1 什么是"垃圾"?

一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法被访问到了,程序用不了他们了,对程序而言,他们已经死亡。

总结:程序中不再被任何存活对象引用的对象。

2、什么是GC Roots

对象可达性的起点:

  • 虚拟机栈中的局部变量引用
  • 本地方法栈中的JNI引用的对象
  • 方法区中的静态变量引用
  • 方法区中常量引用
  • 所有被同步锁持有的对象
  • JVM内部引用(如系统类加载器)

3、垃圾判定算法

  • 引用计数法(不推荐使用)

    • 原理:每个对象维护一个引用计数器,引用增减时更新计数器。计数器=0时判定为垃圾
    • 缺点:无法解决循环引用问题(A->B ,B->A)。
  • 可达性分析算法

    • 原理:从 GC Roots 出发,遍历所有引用链。不在引用链上的对象即为垃圾。
    • 步骤:
      • 1、枚举所有GC Roots。
      • 2、递归标记所有可达对象
      • 3、清除所有未标记的对象(或将其回收)。

4、垃圾回收算法

  • 标记-清除

    • 过程:标记存活对象 -> 清除未标记对象。
    • 缺点: 内存碎片化,效率低(需要扫描全堆)
    • 适用场景:老年代回收(如:CMS的并发标记阶段)
  • 复制算法

    • 过程:将内存分为两块(如 From / To)。将存活的对象复制到To区 -> 清空From区。
    • 缺点:内存利用率低(需要保留一半空闲空间)
    • 优点:无内存碎片、效率高(仅扫描存活对象)
    • 适用场景:年轻代回收(如:Minor GC )
  • 标记-整理

    • 过程:标记存活对象 -> 将对象移动到一端 -> 清理边界外的内存
    • 优点:无碎片。内存利用率高
    • 缺点:移动对象开销大(需要新引用地址)
    • 适用场景:老年代回收(如:Serial Old、Parallel Old)。
  • 分代收集(重点)

    • 核心思想:对不同代使用不同算法
      • 年轻代:对象死亡率高 -> 复制算法(高效)
      • 老年代:对象存活率高 -> 标记-清除 或 标记-整理 (减少复制开销)。

http://www.dtcms.com/a/299267.html

相关文章:

  • 配置DNS正反向解析
  • 深度学习(鱼书)day03--神经网络(后两节)
  • 【教程】无需迁移IDE!Augment原生插件实现Cursor无缝平替 Claude-4无限用
  • ClickHouse高性能实时分析数据库-消费实时数据流(消费kafka)
  • Flutter开发实战之路由与导航
  • Redis面试精讲 Day 5:Redis内存管理与过期策略
  • HTTP 协议的基本格式和 fiddler 的用法
  • 15.6 DeepSpeed+Transformers实战:LLaMA-7B训练效率提升210%,显存直降73%
  • Spring Boot 项目启动自动执行逻辑的最佳实践:掌握 CommandLineRunner
  • Windows11下和Vmware中的Ubuntu22.04设置samba服务遇到的一个问题- valid users和guest设置冲突
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十节:网关安全-单向加密
  • k8s之控制器详解
  • 什么是Paimon?Paimon是什么?
  • 兼容性问题记录
  • 速通python加密之RSA加密
  • 刷题日记0726
  • AI使能的SVD算子:基于深度学习的矩阵分解方法
  • 个人电脑配置IPv6的详细步骤
  • 【线段树】P8473 [Aya Round 1 H] 破碎的历史|普及+
  • TypeScript compilerOptions 深入全面讲解
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • OCR工具集下载与保姆级安装教程!!
  • DSP在CCS中实现双核在线仿真调试及下载的方法(以TMS320F28x为例)
  • iOS 26,双版本更新来了
  • MyBatis_3
  • 【iOS】网易云仿写
  • 全文检索官网示例
  • 算法竞赛阶段二-数据结构(35)数据结构单链表模拟实现
  • springboot + vue3 拉取海康视频点位及播放
  • Kafka——Java消费者是如何管理TCP连接的?