wordpress 调用多媒体,seo推广多少钱,用什么做网站比较好,哪些网站是响应式一、判断垃圾的算法
判断对象是否为垃圾的核心是确定对象是否不再被使用。Java主要采用以下两种算法#xff1a;
1. 引用计数法#xff08;Reference Counting#xff09; 原理#xff1a;每个对象维护一个引用计数器#xff0c;记录被引用的次数。当引用被添加时计数器…一、判断垃圾的算法
判断对象是否为垃圾的核心是确定对象是否不再被使用。Java主要采用以下两种算法
1. 引用计数法Reference Counting 原理每个对象维护一个引用计数器记录被引用的次数。当引用被添加时计数器加1引用失效时减1。当计数器为0时对象被视为垃圾。 缺点 无法解决循环引用问题例如对象A和B互相引用但无外部引用。 Java未采用此算法因为循环引用会导致内存泄漏。
2. 可达性分析算法Reachability Analysis 原理从GC Roots一组根对象出发遍历所有可达对象。未被遍历到的对象视为不可达标记为垃圾。 GC Roots包括 虚拟机栈栈帧中的局部变量中引用的对象。 方法区中静态变量static引用的对象。 本地方法栈JNI中引用的对象Native方法。 Java虚拟机内部对象如基本类型的Class对象。 优点解决了循环引用问题。 注意即使对象不可达也可能在finalize()方法中“复活”但此方法不推荐使用。
3. 引用类型的影响 强引用Strong Reference普通引用如Object obj new Object()只要存在对象不会被回收。 软引用Soft Reference内存不足时被回收适合缓存。 弱引用Weak Reference下一次GC时被回收适合临时缓存。 虚引用Phantom Reference无法通过虚引用获取对象仅用于跟踪回收状态。 二、垃圾回收算法
Java通过不同算法实现垃圾回收核心算法如下
1. 标记-清除Mark-Sweep 步骤 标记遍历所有对象标记存活对象。 清除回收未标记的对象。 缺点 内存碎片化影响大对象分配。 效率不稳定对象越多标记和清除越耗时。
2. 复制算法Copying 步骤将内存分为两块如Eden和Survivor区每次使用一块。存活对象复制到另一块清空原块。 优点无内存碎片适合存活率低的新生代。 缺点内存利用率仅50%需预留空间。
3. 标记-整理Mark-Compact 步骤 标记同标记-清除。 整理将存活对象向内存一端移动清除边界外的空间。 优点避免碎片化适合老年代。 缺点移动对象成本较高。
4. 分代收集算法Generational Collection 核心思想根据对象存活周期将堆划分为新生代Young Generation和老年代Old Generation。 新生代存活率低使用复制算法如Eden和Survivor区。 老年代存活率高使用标记-清除或标记-整理算法。 触发条件 Minor GC清理新生代。 Major GC/Full GC清理老年代通常伴随STWStop-The-World暂停。 三、垃圾收集器
不同垃圾收集器实现了上述算法常见的有 Serial单线程适合客户端应用。 Parallel多线程注重吞吐量。 CMSConcurrent Mark-Sweep并发标记清除减少停顿时间。 G1Garbage-First分区域收集兼顾吞吐量和低延迟。 ZGC/Shenandoah超低延迟暂停时间10ms适用于大内存场景。 总结 判断垃圾Java通过可达性分析GC Roots识别不可达对象。 回收算法根据对象生命周期使用分代收集结合标记-清除、复制和标记-整理算法。 优化方向权衡内存碎片、吞吐量和延迟选择适合的垃圾收集器如G1/ZGC。