File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2020
2121![ ] ( https://ws3.sinaimg.cn/large/006tNc79gy1fmwqi5mv1jj30e407kmxm.jpg )
2222
23- 如图: Object1 ,2,3, 4 都是存活的对象,而 Object5、6、7都是可回收对象。
23+ 如图: Object1 、2、3、 4 都是存活的对象,而 Object5、6、7都是可回收对象。
2424
2525可以用作 ` GC-Roots ` 的对象有:
2626
2929
3030## 垃圾回收算法
3131
32- ## 标记-清除算法
32+ ### 标记-清除算法
3333
3434标记清楚算法分为两个步骤,标记和清除。
3535首选将需要回收的对象标记起来,然后统一清除。但是存在两个主要的问题:
3636- 标记和清除的效率都不高。
3737- 清楚之后容易出现不连续内存,当需要分配一个较大内存时就不得不需要进行一次垃圾回收。
3838
39+ 标记清除过程如下:
40+ ![ ] ( https://ws3.sinaimg.cn/large/006tNc79gy1fmz99ai1n3j30fj08qdgc.jpg )
41+
42+ ### 复制算法
43+
44+ 复制算法是将内存划分为两块大小相等的区域,每次使用时都只用其中一块区域,当发生垃圾回收时会将使用存活的对象全部复制到未使用的区域,然后对之前的区域进行全部回收。
45+
46+ 这样简单高效,而且还不存在标记清除算法中的内存碎片问题,但就是有点浪费内存。
47+
48+ > 在新生代会使用该算法。
49+
50+ 新生代中分为一个 ` Eden ` 区和两个 ` Survivor ` 区。通常两个区域的比例是 ` 8:1:1 ` ,使用时会用到 ` Eden ` 去和其中一个 ` Survivor ` 区。当发生回收时则会将还存活的对象从 Eden ,Survivor 区拷贝到另一个 Survivor 区。当该区域内存也不足时候则会使用分配担保使用永久代来存放内存。
51+
52+ 复制算法过程:
53+ ![ ] ( https://ws3.sinaimg.cn/large/006tNc79gy1fmzavlf4enj30fj08qt9b.jpg )
54+
55+
56+
3957### 分代回收
You can’t perform that action at this time.
0 commit comments