GC垃圾回收机制总结

【Java】浅谈Java的GC机制 目录一、GC机制概述二、JAVA的内存管理1、私有内存区:2、共享内存区三、GC机制详述(一) 确定回收对象1、如何确定哪些内存需要被回收?2、四种引用类型(二) 确定回收机制1、标记-清除算法(Mark-Sweep)2、复制算法(Copying)3、标记-整理算法(Mark-Compact)4、分代收集算法(三) 确定回收时机四、垃圾收集器1、Serial收集器2、Serial Old收集器3、... 阅读详情

本文参考(https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/java/jvm/JVM-%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6.md)
(https://blog.youkuaiyun.com/u013630349/article/details/78342645)文章,如若侵权请通知删除。

最近面试一直会被问到关于GC的问题,之前知道这方面知识,面试答的时候也能答出来,但是总是觉得没有条例的讲解和回答总会让人觉得自己这方面东拼西凑出来的,太杂乱了,所以今天有条理的总结一下GC的来龙去脉。这次仅是总结,相信以后还会从源码层次再次进行分析。

GC概述
垃圾回收是一种自动的存储管理机制。 当一些被占用的内存不再需要时,就应该予以释放,以让出空间,这种存储资源管理,称为垃圾回收(Garbage Collection)。 垃圾回收器可以让程序员减轻许多负担,也减少程序员犯错的机会。

接下来我从**什么时候?对什么东西?做了怎么样的处理?**三个方面来进行分析。

1. 首先第一个问题就是什么时候?换句话说就是GC的触发条件

GC触发的条件有两种:

(1)程序调用System.gc时可以触发;

(2)系统自身来决定GC触发的时机。

第二个条件“系统自身来决定”我最开始看到是一脸蒙逼的,什么叫自身决定,JAVA虚拟机它就算再只能也是人写的,所以肯定会有它内部的触发条件。要了解它的触发条件,就要先了解一下JVM内存空间,请看图片
在这里插入图片描述

程序计数器:线程私有。是一块较小的内存,是当前线程所执行的字节码的行号指示器。是Java虚拟机规范中唯一没有规定OOM(OutOfMemoryError)的区域。

Java栈:线程私有。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小不会改变。存在两种异常情况:若线程请求深度大于栈的深度,抛StackOverflowError。若栈在动态扩展时无法请求足够内存,抛OOM。

Java堆:所有线程共享。虚拟机

Go语言GC机制超详细 什么是GC?他的英文全称(英语:Garbage Collection,缩写为GC),在计算机科学中是一种自动的存储器管理机制。当一个计算机上的动态存储器不再需要时,就应该予以释放,以让出存储器,这种存储器资源管理,称为垃圾回收。垃圾回收器可以让程序员减轻许多负担,也减少程序员犯错的机会(-----来自维基百科)简单地说,垃圾回收(GC)是在后台运行一个守护线程,它的作用是在监控各个对象的状态,识别并且丢弃不再使用的对象来释放和重用资源。 阅读详情

相关推荐

JAVA GC垃圾回收机制详解

引言 在上一篇博客中我们详细分析了,JVM的内存结构。既然提到了JVM那么我们必须得谈一谈GC垃圾回收机制了,在分析垃圾回收机制之前呢,我们还是需要来内存结构中堆(Heap)的详细结构。 图中展示了堆中三个区域:Eden、From Survivor、To Survivor。从图中可以也可以看到它们的大小比例,准确来说是:8:1:1。为什么要这样设计呢,本篇文章后续会给出解答,还是根据垃圾...

Jack 架构师之路 17万+

Java GC垃圾回收机制

文章目录一、Java GC二、GC 回收的对象三、GC 回收过程1、图解分代内存1.1 年轻代1.2 年老代1.3 永久代2、图解 GC 回收过程对象分配策略3、Minor GC 和 Full GC 本文内容基于目前使用最广泛的 HotSpot JVM。 参考书籍:《深入理解Java虚拟机:JVM高级特性与最佳实践》–周志明 一、Java GC Java 垃圾回收机制是由 GC(Garbage...

媛测 696

Java面试题:GC垃圾回收机制

GC垃圾回收(Garbage Collection的简称):当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收不再使用的内存空间。系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储空间。在程序运行中会不断地创建很多的对象,这些对象数据会占用系统内存,如果得不到有效的管理,内存的占用会越来越多,甚至会出现内存溢出的情况,所以需要对内存进行合理地释放,这个时候就要用到GC垃圾回收机制。

m0_74825699的博客 1548

java面试-GC垃圾回收机制

JVM 中的堆,一般分为三大部分:新生代、老年代、永久代。

Ase5gqe的博客 866

增量编码器资讯大全

增量编码器是什么 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,按照工作原理编码器可分为增量式和绝对式两类。 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 编码器是把角位移或直线位移转换成电信号的一种装置。前者称为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采...

kindele的博客 6008

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

CentOS Stream 9中安装MySQL的详细步骤

本文详细介绍了在CentOS Stream 9系统中如何进行MySQL的在线安装、离线安装以及忘记密码的恢复操作。通过阅读本文,您将能够了解并掌握在CentOS Stream 9上安装MySQL的步骤,以及在遇到忘记密码的情况下的解决方案。

小白典的博客 7258

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2489

4、机器人建模、规划与控制及运动学知识解析

本博客深入解析了机器人建模、规划与控制的核心内容,涵盖运动学与动力学的基本原理,并结合典型应用场景探讨了移动机器人与操作器的控制策略。同时,博客还介绍了机器人技术的发展趋势及其在工业和服务领域的广泛应用。

desk3的博客 123

如何绘制电气绝缘图(GB9706.1-2007和GB9706.1-2020差异)

是用来描述要考虑设备的绝缘状况和它们的值 ,从而便于和相关部门交流和沟通,如权威机构和检测实验室等。本文为绝缘图的实例, 包括所有相关的绝缘路径以及介电强度,爬电距离和电气间隙的值。

学海无涯的专栏 1万+

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 383

YOLOv13涨点改进 | 全网独家创新、HyperACE改进、注意力改进篇 | CVPR 2025| 引入LRSA局部区域自注意力模块,能提升其在细节捕捉、小目标检测和长距离依赖建模方面的能力

本文提出将LRSA(局部区域自注意力)模块集成到YOLOv13中,通过局部特征交互增强细节捕捉能力、小物体检测精度和长距离依赖建模。LRSA模块采用重叠图像块处理策略,在保持计算效率的同时提升复杂背景下的检测性能。文章详细介绍了模块结构、原理优势,并提供了三种改进方案:1)在主干网络添加LRSA层;2)将关键模块替换为DSC3k2_LRSA;3)采用HyperACE_LRSA结构。配套提供了完整的PyTorch实现代码和YAML配置文件,展示了该模块如何通过局部注意力机制平衡检测精度与推理速度。

Ai缝合怪、助力小伙伴高效发论文 345

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Android优化之UI优化
下一篇: Android优化之内存优化
final__static
博客等级 码龄9年 94粉丝 24原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值