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

一次性理解Java垃圾回收--简单直接方便面试时使用

Java的垃圾回收是一个面试必问题,只要按照下面的步骤回答肯定不会有大问题。

1.先告诉面试官垃圾回收分为两大步:

a.识别哪些对象是"垃圾"(不再被使用的对象)
b.回收这些垃圾对象占用的内存空间

2. 接下来分别介绍标记阶段和回收阶段的细节

标记阶段(比较简单,两句话):

从GC Roots(包括虚拟机栈、本地方法栈、方法区中的静态属性、常量等引用)开始遍历;
被GC Roots直接或间接引用到的对象标记为存活,其他的就是垃圾

清除阶段(回答重点,有多种算法实现):

标记-清除算法:

直接清除被标记为垃圾的对象【简单直接,但是会产生内存碎片】

标记-整理算法:

将所有存活对象向内存的一端移动,然后清理界外内存【避免内存碎片,但是对象移动的成本比较高】

复制算法

将内存分成两块,只使用其中一块,GC时将存活对象复制到另一块【无碎片,高效;但是内存利用率只有50%】

上面三种基础算法,但是现在常用垃圾收集器都是综合使用上面的算法,也就是:

分代收集

把整个堆空间进行划分,分为新生代 & 老年代 & 元空间【本地内存】

新生代 (存活的对象少)

使用复制算法
Eden和Survivor 区 新对象在Eden区;Eden区满出发Minor G(理想间隔1-5分钟,<100ms),存活对象移动的Survivour 区,Survivor区间内分两个空间,回收的时候互相多次复制(默认15次)后晋升到老年代

老年代

使用标记-清除或标记-整理算法
存放长期存活的对象
当老年代空间不足时触发Major GC/Full GC(应极少发生(<1次/天;<1s))

3.拓展部分

常用的调优手段:
1.web开发一般用G1作为垃圾回收期比较多(-XX:+UseG1GC)
2.怎么确认GC 是否有异常:
打印GC日志,看GC频率是否正常
(-Xloggc:/path/to/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution)
3. jmap 命令
4.调整新生代的比例
短生命周期对象多的应用:增大新生代(NewRatio=1)
长生命周期对象多的应用:减小新生代(NewRatio=3)
-XX:NewRatio=2(新生代:老年代=1:2)

http://www.lqws.cn/news/475381.html

相关文章:

  • 半导体二极管
  • C# Quartz.net 定时任务
  • c# .netCreateLinkedTokenSource链接令牌,取消信号异步执行
  • 二、海思网卡数据流程
  • 多源异构数据接入与实时分析:衡石科技的技术突破
  • 虚拟与现实交融视角下定制开发开源AI智能名片S2B2C商城小程序赋能新零售商业形态研究
  • 【node】Mac m1 安装nvm 和node
  • Vulkan 学习笔记15—Mipmap 与多重采样
  • Vue3+TypeScript+Element Plus 表格展开行优化方案
  • MongoDB:索引
  • 【机器学习的五大核心步骤】从零构建一个智能系统
  • Linux 服务器运维:磁盘管理与网络配置
  • go excel解析库xuri/excelize中的SAX
  • LLMs之Embedding:Qwen3 Embedding的简介、安装和使用方法、案例应用之详细攻略
  • 【weaviate】分布式数据写入之LSM树深度解析:读写放大的权衡
  • 数据库(1)-SQL
  • webpack+vite前端构建工具 -6从loader本质看各种语言处理 7webpack处理html
  • 案例:塔能科技以“数字光网”重塑某市照明绿色生态
  • Docker 运行RAGFlow 搭建RAG知识库
  • LeapMotion-PhysicalHandsManager 类详解
  • 7.5.1散列表的基本概念
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • 深入解析Flink Local模式启动流程源码:揭开作业初始化的神秘面纱
  • vue3 el-table 行颜色根据 字段改变
  • 企业级安全实践:SSL 加密与权限管理(二)
  • python 常见数学公式函数使用详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)
  • swift-17-字面量协议、模式匹配、条件编译
  • Java 21 的虚拟线程与桥接模式:构建高性能并发系统
  • Kafka Streams入门与实战:从概念解析到程序开发