GC是干啥的?
C/C++是没有GC的,对于内存管理,就比较麻烦,需要手动在适合的时候释放的,而Java,Python和Go等语言则自带GC,对于内存管理来说就比较方便。在C/C++中,若是申请了空间没有释放,就又可能会导致内存泄漏,而GC则会很大程度的预防这个问题,但是不代表内存一定安全
GC回收的本质又是什么呢?
GC回收的本质其实就是在 回收对象,以对象为基本的单位,把不需要的对象找出来,回收释放内存即可,比起以字节为单位,以对象为单位更加的简单方便。
有GC和没有GC的区别
GC对于内存管理来说,就相当于学校社团向学校申请教室准备集体活动,活动结束后学校会有专门的保洁阿姨来打扫卫生,这时候的保洁阿姨就相当于是GC,她会自动过来打扫教室卫生,如果学校没有专门的阿姨打扫卫生,就需要社团的学生自己来打扫卫生,就相当于没有GC
GC需要收集哪些内存?
1.堆上(主要回收区域)
堆的区域很大,有new就会申请内存。整个的内存都是源自于操作系统。JVM一启动,就会立马从操作系统申请一大块内存,再给这些内存分配一些区域
2.常量池/方法区 占用空间比较小,数据经常使用,使用GC收集性价比不高
回收对象有哪些步骤?
1>.标记:找到哪些对象是垃圾,标记方式有很多
2>.回收:把垃圾对象释放,回收方式有很多
大的方向就是这两点,具体的细节还是有很大的差异
关于GC标记的详细总结GC垃圾收集机制(2)