导语
在学习垃圾回收算法之前,首先需要了解什么是Heap、什么是Root、什么是Object、什么是Stack、什么是Pointer,这写概念都是什么,为什么要在垃圾回收算法中使用,使用这些东西有什么样的好处,为什么这样使用。带着这些问题来进入一个新的学习系列。
首先我们知道Java是一个面向对象的编程语言,这里首先需要了解的就是对象是什么,对于对象的创建、使用、销毁又是如何实现的。了解对象之后,就知道GC操作就是围绕这些对象展开,而这些对象概括起来就是被应用程序所使用的数据集合。
程序从开始运行就有很多的对象在内存空间中进行初始化操作,然后就是如何使用这些对象,在对象被应用程序使用完成之后,就进入到Java的垃圾回收机制,Java语言不需要使用者自己管理内存,通过自动内存管理的机制,在对象回收的过程中GC会根据这些对象的使用配置情况对对象进行移动或者销毁,所以在GC中就必须要知道这些对象都是什么。在GC中的对象主要包括两部分内容对象头header和field域。
对象结构
对象头
作为一个对象来说首先,一个对象头主要包含以下的一些信息
- 对象的大小
- 对象的种类
这里的对象头就是用来标识对象的大小和对象的种类,对象的大小就是用来管理对象在内存中存储边界,而对象的类型就是控制在应用程序中如何使用这个对象,所以说对象头,在整个的应用对象使用的过程中包括在后续的垃圾回收机制中都是非常重要的。
由于看到在对象中有关于对象大小和种类等信息。然后在后续的GC过程中就可以根据GC算法的不同来存储不同的信息。尽可能的保证就是高效的数据组织形式,也就是是根据合适的算法安排一个合适的数据存储结构。例如在标记清除算法中,就在对象头部设置了一个flag标识位来对对象进行标记管理。
在所有的垃圾回收算法中都需要使用的内容就是对象的大小和对象种类信息,所以说这些基础信息在对象创建的时候就
本文首先介绍了垃圾回收前需了解的基础概念,包括Heap、Root、Object、Stack和Pointer。接着详细讲解了对象结构,如对象头包含对象大小和种类信息,以及域中的指针和非指针。文章还阐述了Mutator的作用,堆内存的分配和管理,活动对象与非活动对象的区分,以及分配和分块策略。最后提到了GC如何从根开始寻找活动对象,并总结了GC前必须掌握的知识点。
订阅专栏 解锁全文
7753

被折叠的 条评论
为什么被折叠?



