贺州网站推广,wordpress 控件,海口网站建设fwlit,做的网站上更改内容改怎么办转载自 JVM调优总结#xff08;2#xff09;#xff1a;基本垃圾回收算法可以从不同的的角度去划分垃圾回收算法#xff1a;
按照基本回收策略分
引用计数#xff08;Reference Counting#xff09;:
比较古老的回收算法。原理是此对象有一个引用#xff0c;即增加一个…转载自 JVM调优总结2基本垃圾回收算法可以从不同的的角度去划分垃圾回收算法
按照基本回收策略分
引用计数Reference Counting:
比较古老的回收算法。原理是此对象有一个引用即增加一个计数删除一个引用则减少一个计数。垃圾回收时只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。
标记-清除Mark-Sweep:此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象第二阶段遍历整个堆把未标记的对象清除。此算法需要暂停整个应用同时会产生内存碎片。
复制Copying:此算法把内存空间划为两个相等的区域每次只使用其中一个区域。垃圾回收时遍历当前使用区域把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象因此复制成本比较小同时复制过去以后还能进行相应的内存整理不会出现“碎片”问题。当然此算法的缺点也是很明显的就是需要两倍内存空间。
标记-整理Mark-Compact:此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段第一阶段从根节点开始标记所有被引用对象第二阶段遍历整个堆把清除未标记对象并且把存活对象“压缩”到堆的其中一块按顺序排放。此算法避免了“标记-清除”的碎片问题同时也避免了“复制”算法的空间问题。
按分区对待的方式分
增量收集Incremental Collecting:实时垃圾回收算法即在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。
分代收集Generational Collecting:基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代对不同生命周期的对象使用不同的算法上述方式中的一个进行回收。现在的垃圾回收器从J2SE1.2开始都是使用此算法的。
按系统线程分
串行收集:串行收集使用单线程处理所有垃圾回收工作因为无需多线程交互实现容易而且效率比较高。但是其局限性也比较明显即无法使用多处理器的优势所以此收集适合单处理器机器。当然此收集器也可以用在小数据量100M左右情况下的多处理器机器上。
并行收集:并行收集使用多线程处理垃圾回收工作因而速度快效率高。而且理论上CPU数目越多越能体现出并行收集器的优势。
并发收集:相对于串行收集和并行收集而言前面两个在进行垃圾回收工作时需要暂停整个运行环境而只有垃圾回收程序在运行因此系统在垃圾回收时会有明显的暂停而且暂停时间会因为堆越大而越长。