今天在聊天时,一个群友对JVM进行GC后如果整理内存那么会对对象产生怎样的影响产生了疑问,我觉得挺有意思的,就查阅了一下资料在此做一个记录。
首先我们来看下经典《Thinging in Java》提供了怎样的思路:

图1

我们都知道在常用算法中会对内存进行整理的是复制算法(Copying GC)和标记-整理算法(Mark-Compact GC)。首先让我们来康康复制算法。

复制算法(来自《垃圾回收的算法与实践》

copying(){
    $free = $to_start
    for(r : $roots)
        *r = copy(*r)
    swap($from_start, $to_start)
}

$free 是指示分块开头的变量。首先在第 2 行将 $free 设置在 To 空间的开头,然后在第 3 行、第 4 行复制能从根引用的对象。 copy() 函数将作为参数传递的对象 r 复制的同时,也将其子对象进行递归复制。复制结束后返回指针,这里返回的指针指向的是 r 所在的新空间的对象。

最近太忙了。。。。有空了写,内容比较多

Last modification:January 17th, 2020 at 05:13 am
大家一起分享知识,分享快乐