jvm垃圾搜集器的原理
1.引用计数法(Reference Counting)
第一种比较的古老,了解一下就行,所以我们接下来看第二种解决的方法
2.标记_清除算法(Mark-Sweep)
垃圾回收分为两个阶段,标记阶段和清除阶段,用标记阶段解决的,根节点没指向的对象就称为清除对象,如果对象没被引用,就会被清除,内存中就会不连续,就会产生碎片,访问降低效率,我们都知道,连续的内存空间,就会联想到数组,我们都知道数组查询比较的快,就是应用的连续内存空间,反之。
3.复制算法(Copying)
复制算法效率比较的高,幸存区(0 1)和伊甸区运用的算法就是复制算法,当a对象还存活时,就会把a对象复制到幸存区中,伊甸区就会清空内存空间,也解决内存空间不连续,但就会把内存空间切分成两块进行处理,那么如果幸存区中有10个对象,已经占满内存,只有1个没被引用,9个会被复制,这样的效率会大大降低,无法体现复制算法的有点,优点就是存活对象很少,效率会很高,新生代就会体现的很到位,存活的对象比较的少,满足新生代的需求(总结 复制算法适合在新生代,不适合在老年代)
4.标记_压缩算法(Mark-Compact)
标记压缩算法就是标记清除算法的升级版,同一块不连续的空间进行压缩,让其进行连续,提高虚拟机的运行速率,避免了空间碎片的问题
5.增量算法(Incremental Collecting)
在gc回收垃圾时,假设我们把时间把时间变慢,我们在进行垃圾回收时,假设回收垃圾需要1s,那么我们所有的程序都会等待垃圾回收以后才会运行,这样的好处就是让程序更流畅的运行,我们增加gc的频繁使用就会对性能造成影响,本身的代价比较高,成本比较的大
6.分代(Generational Collecting)
分代就是把内存分为 伊甸区 幸存区 养老区 永久存储区
我们通常在运用的时候一般都是运用346比较的多一点 1了解就行 比较的老