垃圾回收算法

G1垃圾回收和其他的区别

  1. 串行回收:主要面向单线程环境

  2. 并行/吞吐量回收器:JVM默认回收器,Parallel collector,最大的有点是使用多个线程来扫描以及压缩对,其缺点是minorGC或者fullGC都会暂停应用程序

  3. CMS回收器:这个算法使用了多个线程来扫描对并标记那些不再使用的可以回收的对象。这个算法在两种情况下会进入一个“stop the world”的模式。但进行跟对象的·初始标记的时候(老年代中线程入口点或者静态变量科大的哪些对象)以及当这个算法在并发运行的时候应用程序改变了对的状态是的他不得不得回去确认自己的标记是或否都是正确的。还有一个使用这个垃圾回收器碰到的问题是promotion fail,在这时候老年代没有多余的空间,他只能进行一次stw的full gc,为了去表不会发生这种事情,要么增加的老年代的大小。

    还有一个缺点就是和并行回收器相比,他使用的CPU资源会跟多,假如你的堆小于4G,而你又希望分配更多的CPU资源以避免应用暂停。

  4. G1回收器:G1回收器将堆分为多个区域,大小从1MB到32MB不等,并使用多个后台线程来扫描他们。G1回收器会优先扫描那些包含垃圾最多的区域,这正是他名字的由来。

    这一策略减少了后台线程还未扫描完无用对象前堆就已经用完的可能性,那种情况回收器就必须暂停应用,这会导致STW回收。G1的另一个好处就是他总会进行堆的压缩,二CMS回收器只用在Full GC的时候才会干这个事。

    现在的微服务包括格力程序的组件,简化部署,便面重新加载应用类到内存所长城的开销

    这么做主要还是避免中长期的“stop the world”的暂停

    G1回收器的字符串去重,由于字符串占用了大多数的对空间,这样的优化是的G1回收器能识别出对重的那些重复出现的字符串并将他们指向同一个内部的char[]数组,以避免一个字符串的多份拷贝,这样的对的使用效率会变得很低。

你可能感兴趣的:(垃圾回收算法)