课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收问题是程序员在学习Java编程开发技术需要重点掌握的一个编程知识,而今天我们就通过案例分析来了解一下,Java编程垃圾回收算法应用。
Markandsweep是简单的垃圾回收算法,简单点讲,它可以分为两个步骤:
标记live对象
标记live对象听起来很简单,就是扫描堆中的对象,看这些对象是否被引入。
但是这里有一个问题,如果是两个对象互相引用的时候,而这两个对象实际上并没有被外部的对象所引用,那么这两个对象其实是应该被回收的。所以我们还需要解决一个关键性的问题:从哪里开始扫描的问题。
JVM定义了一些Root对象,从这些对象开始,找出他们引用的对象,组成一个对象图。所有在这个图里面的对象都是有效的对象,反之不在对象图中的对象就应该被回收。有效的对象将会被Mark为alive。
这些Root对象包括:正在执行的方法中的本地对象和输入参数。活动的线程,加载类中的static字段和JNI引用。
注意,这种遍历其实是有个缺点的,因为为了找到对象图中哪些对象是live的,必须暂停整个应用程序,让对象变成静止状态,这样才能构建有效的对象图。后面我们会介绍更加有效的垃圾回收算法。
删除对象
扫描对象之后,我们就可以将未标记的对象删除了。
删除有三种方式,一种方式是正常删除。但是正常删除会导致内存碎片的产生。所以二种方式就是删除之后进行压缩,以减少内存碎片。还有一种方式叫做删除拷贝,也就是说将alive的对象拷贝到新的内存区域,这样同样可以解决内存碎片的问题。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。