JAVA垃圾回收的工作原理是什么?

Python016

JAVA垃圾回收的工作原理是什么?,第1张

Java虚拟机采取了一种自适应的垃圾回收技术。

停止-复制:先暂停程序(它不属于后台回收模式),然后将所有存活的对象从当前的堆中复制到另一个堆中,没有复制的对象就是垃圾,而被复制到新堆中的对象会紧凑的排列。

标记-清扫:遍历所有引用,进而找出多有存活的对象。当没找到一个存活的对象,就会给对象标记,这个过程中不会清理任何对象。只有全部标记完成之后,才会清理垃圾。

在Java虚拟机运行过程中,如果所有对象稳定,垃圾回收器效率降低的话,就会切换到"标记-清扫";同意,Java虚拟机会跟踪"标记-清扫"效果,要是堆空间出现很多碎片,就会切换到”停止-复制“

优点:a.不需要考虑内存管理, b.可以有效的防止内存泄漏,有效的利用可使用的内存, c.由于有垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"

原理:垃圾回收器是作为一个单独的低级别的线程运行,在不可知的情况下对内存堆中已死亡的或者长期没有使用的对象回收,但是不能实时的对某一对象或者所有对象进行垃圾回收。

垃圾回收机制:分代复制垃圾回收、标记垃圾回收、增量垃圾回收

GC(Gabage Collection)工作原理:当创建对象时,GC就开始监视这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理heap(堆)中的素有对象。通过这种方式确定哪些对象是“可达的”,哪些是“不可以达的”。

垃圾回收机制通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清理,我们虽然可以调用System.gc()让垃圾回收器运行,但依旧无法保证GC一定会执行。