标记整理法:标记活对象和可回收对象,然后对内存对象进行整理,将存活对象移动到内存的一端,并清除存活对象边界之外的对象。此方法既解决了标记复制法的空间浪费问题,又解决了标记清除法的空间碎片问题,但性能相对较低。GC类型:Minor GC(新生代GC):发生在新生代的垃圾收集动作。由于Java对象具有朝生...
Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾收集算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。 大多数垃圾回收算法使用了根集(root set)这个概念;所谓根集就量正在执行的Java程序可以访问的引用变量的集合(包括局部变量、...
理解垃圾回收,首先要先理解没有垃圾回收的时候是怎么做的。就像要真正了解ABS的作用,首先要开一开没有ABS的车子是一样的道理。没有垃圾回收的时代,动态分配的内存都需要程序员手动的进行回收。比如C语言时代,动态分配堆内存一般使用malloc()函数,而回收内存使用free()函数。在C++时代,动态分配堆内存...
垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象是否是时候可以收集。垃圾收集能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的...
在介绍JVM中的根搜索算法前,需要了解Java中常见的引用类型,包括强引用、软引用、弱引用和虚引用。强引用:使用最普遍的引用。如果一个对象具有强引用,垃圾回收器绝不会回收它。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,也不会回收具有强引用的对象。软引用:如果内存空间足够,垃圾...