第九周作业
简述JVM垃圾回收原理。
JVM垃圾回收就是将JVM堆中的已经不再使用的对象清理掉,释放宝贵的内存资源。
对垃圾对象的识别:
JVM通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量触发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。
对垃圾对象占用的内存进行回收:
进行标记以后,JVM就会对垃圾对象占用的内存进行回收,回收主要有三种方法:
清理:将垃圾对象占据的内存清理掉,其实JVM并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里。当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。
压缩:从堆空间的头部开始,将存活的对象考本科放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间。
复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复制到另一空间中。
本周总结:
世上无难事,只怕有心人。能静下心来钻研的人,必定有所收获。
评论