详解gc(垃圾回收)机制二:认识GC基本概念

简介: 详解gc(垃圾回收)机制二:认识GC基本概念

对象

"对象"这个词,在面对对象编程中,它指的是"具有属性和行为的事物",

而在GC的世界中,对象表示的是:"通过应用程序利用的数据的集合"

对象配置在内存空间里,GC根据情况将配置好的对象进行移动或者销毁,因此,对象是GC的基本单位.

一般来说,对象由 头(header) 和域(field)构成


保存对象本身信息的部位称为 "头",头主要含有以下信息:

1:对象的大小

2:对象的种类

此外,头还包含了运行GC所需要的信息,例如 标记-清除 算法,将会在头部设置一个flag 来记录对象是否已经标记

对象使用者在对象中可访问的部分称为 "域",类似于c语言中结构体的成员.

对象使用者会 引用/替换 对象的域值,但是对象使用者基本上无法直接更改头的信息

域中的数据类型大致分为以下2种:

1:指针类型

2:非指针类型

image.png

在对象域中,可以包含一个或多个新的对象,这就代表了子对象都处于该对象的域中,当该对象需要回收时,意味着域中的所有对象都可以回收(大多数情况下是的,但是可能出现内存逃逸,或者其他对象也引用了子对象的情况)

image.png

mutator  改变器

这个是Edsger Dijkstra 想出来的词,意思是改变某物的意思

在gc中,它的实体是应用程序,gc在mutator中运行,

操作应用程序中的对象

更新程序内的指针

堆在前文其实讲到过,就是动态存放对象的内存空间,

在mutator申请存放对象时,会从堆中分配给mutator

gc管理 堆中已经分配的对象,当堆占用到一定大小后,将启动gc清理垃圾对象

活动对象/非活动对象

在程序运行之后, mutator会不停的更新创建对象,更新对象指针,例如:

#include<stdio.h>
#include<stdlib.h>
int inc();
int main() {
    int a = 1;
    int c = inc(a, 1);
    printf("%d", c);
    return 0;
}
int inc(int a, int b) {
    return a + b;
}

当运行到int a = 1时,a对象将创建

运行到 inc函数时, inc 函数的a,b,将引用main中的a,1,意味着inc函数的 a,b引用了int a,

而再继续运行c时,其实 inc 函数里面的 a和b已经没有被mutator使用了

我们把能被mutator引用的对象称为:"活动对象"

不能被mutator 引用的称为:"非活动对象".也就是垃圾对象

分配

分配(allocation)指的是在内存空间分配对象

当mutator需要新对象时,就会向分配器(allocator)申请一个大小合适的空间,分配器则在堆的可用空间内寻找满足要求的空间,返回给mutator

像java,go,这些配备了自动GC的编程语言中,会在内部进行自动分配,

而c语言则需要手动 使用malloc 进行分配

分块

分块(chunk) 指的是为利用对象而事先准备出来的空间

初始状态下,堆被一个大的分块所占据,然后程序会根据mutator的要求把分块分隔成合适的大小,给对象使用,对象转为非活动对象时将回收.

根指的是对象的指针的起点部分

在程序运行中,可以被mutator直接引用的对象      例如全局变量,调用栈,寄存器 都属于根的部分

目录
相关文章
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
80 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
2月前
|
存储 Java PHP
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
85 0
|
3月前
|
缓存 Java Python
python垃圾回收&缓存机制
python垃圾回收&缓存机制
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
89 0
|
4月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
103 4
|
4月前
|
算法 Java 应用服务中间件
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
|
5月前
|
监控 算法 Java
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
415 4
|
5月前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
87 0
|
6月前
|
算法 Java 云计算
JVM垃圾回收的历史演进:从GC算法到垃圾回收器选择
JVM垃圾回收的历史演进:从GC算法到垃圾回收器选择