栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM虚拟机02:学习GC回收期必备前置知识-----什么是Java的垃圾?定位垃圾方式有哪些?GC回收的清除算法有哪些?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM虚拟机02:学习GC回收期必备前置知识-----什么是Java的垃圾?定位垃圾方式有哪些?GC回收的清除算法有哪些?

1,什么是垃圾(Garbage)?

JVM虚拟机01:程序的栈(栈帧stack frame)和堆
首先我们之前就可以,GC(垃圾回收机制)是针对于内存在堆中的回收的?
所以什么是垃圾?
垃圾就是内存中无用实例。

看下图,如果对象B还指向对象实例B的话,那么就说明,
对象B是被引用的,不是垃圾,但是在图中,变量B已经没有引用对象了,所以实例没有被引用,也就是我们垃圾

2,定位垃圾方式有哪些?

GC回收方式一共有两种:

(1)引用计数(Reference Count)Python

参考文章:引用计数-百度百科

也就说针对某一个对象进行计数?
引用减少,则计数减少:

a,实例,如下图:

当还有三个对象进行引用的时候:

两个对象引用:

一个对象引用:

变成0(垃圾)

当计数为0的时候,就会标记为垃圾
这样有一个不好的地方在于:
特例

b,无法解决-特列-互相引用:


三个对象相互引用,则会导致照不出来

(2)Root Searching 寻根(Java使用)

也就说,从某个最开始变量或者方法开始,能够找到则不是方法,如果找不到那么就是方法。
如图

3,清除算法(GC Algorithms)三种

自上世纪60年代开始:只有这三种
(1)Mark-Sweep(标记清除)
(2)Copying(拷贝)
(3)Mark-Compact(标记压缩)
详解如下:

(1)Mark-Sweep(标记清除)–缺点:内存碎片化

在上述中,找到垃圾标记,之后直接清除
、但是这样有一个缺点

标记清除的缺点:

标记清除的缺点就是,会造成内存空间碎片化,也就说在开辟一片比较大的连续内存时候,就会出现内存不足的情况。

(2)Copying(拷贝)–缺点:浪费内存

拷贝,则是将内存分为两块,一边是原生态A,一边是没有动过的空内存B
另外一遍是相较之前比较空的,所以当GC进来之后,就会从Root Search(根寻)找到非垃圾全部复制到另外一半内存B中并且排列好,
将内存A全部清除

(3)Mark-Compact(标记压缩)–缺点:效率低

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301761.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号