Garbage Collection基础知识
在学习Garbage Collection算法之前,我们需要了解一些Garbage Collection相关的基础知识,比如对象、头、域、指针、堆等等。
Garbage Collection基础知识
- 1.Garbage Collection基础知识
- 2.常见的Garbage Collection Algorithm
- 3.GC
- 3.1对象、头和域
- 3.2 堆
- 3.3 根
- 3.4 GC性能的评价标准
1.Garbage Collection基础知识
Garbage definition:程序在内存空间中用不到的部分叫做垃圾。
Garbage Collection主要做的就是两件事:
- 找到内存空间里面的垃圾;
- 回收垃圾,让程序可以再次使用这部分内存空间。
那么我们为什么要使用GC呢?以一个例子来说,也就是C++和Java语言的区别。
我们先说说没有GC时代,比如C++,我们是需要自己手动的进行内存管理的,也就是对于作用域内不需要的内存空间我们需要自己手动的释放。只要是手动的,就容易犯错,比如:忘记释放不需要的内存空间就会导致 memory leak;访问非法的内存空间(已经释放的内存)会导致不可预知的BUG,也就是悬垂指针。
所以手动的都有风险,GC就是通过一定的机制将内存的分配和回收自动化,程序员不用关心内存管理,避免前面所说的内存BUG。
当然引用GC的自动化管理内存肯定会带来性能损失,这个是很容易理解的。GC是一个高负载的处理,需要花费一定的时间。
我个人理解,GC主要分别两部分:
(1)找到可以被回收的内存空间;
(2)释放这部分可回收的内存空间。
2.常见的Garbage Collection Algorithm
我们常见的GC算法有以下几种:
- GC标记-清除算法(Mark-Sweep);
- 引用计数法;
- GC复制算法;
- 现代其他组合算法:其实也就是以上三种算法的组合和变种。
3.GC
3.1对象、头和域
我们说GC一般是回收内存中的对象,在GC里面,对象指通过应用程序利用的数据的集合。
GC中一个对象主要包括头和域。
头里面主要保存对象本身的信息,比如:对象的大小、对象的种类、运行需要的信息等等。根据GC算法的不同,对象头中需要的信息也不一样。
域主要指对象中可访问的部分。对象中的域数据类型一般是两种:指针类型、非指针类型。
指针一般默认指向对象的首地址。
3.2 堆
堆里面就是用于动态存放对象的内存空间,这里就不解释了,这个概念很好理解。
3.3 根
在GC里面,根是指向对象的指针的“起点”部分。也就是进行GC检测的起点。
3.4 GC性能的评价标准
吞吐量:单位时间内的处理能力。
STW(Stop the world) 时间:因为GC程序停止运行的时间。
堆使用效率:
还没有评论,来说两句吧...