网站空间多少钱一年自己做购物网站推广

当前位置: 首页 > news >正文

网站空间多少钱一年,自己做购物网站推广,沈阳商城网站建设,濮阳公司做网站文章目录 分代收集理论标记-清除算法标记-复制算法标记-整理算法 分代收集理论 当前商业虚拟机的垃圾收集器#xff0c;大多数都遵循了“分代收集”#xff08;Generational Collection#xff09;[1]的理论进 行设计#xff0c;分代收集名为理论#xff0c;实质是一套符… 文章目录 分代收集理论标记-清除算法标记-复制算法标记-整理算法 分代收集理论 当前商业虚拟机的垃圾收集器大多数都遵循了“分代收集”Generational Collection[1]的理论进 行设计分代收集名为理论实质是一套符合大多数程序运行实际情况的经验法则它建立在两个分代假说之上 弱分代假说Weak Generational Hypothesis绝大多数对象都是朝生夕灭的。 强分代假说Strong Generational Hypothesis熬过越多次垃圾收集过程的对象就越难以消 亡。
把分代收集理论具体放到现在的商用Java虚拟机里设计者一般至少会把Java堆划分为新生代 Young Generation和老年代Old Generation两个区域[2]。顾名思义在新生代中每次垃圾收集 时都发现有大批对象死去而每次回收后存活的少量对象将会逐步晋升到老年代中存放。 对于分代理论由于会存在老年代引用新生代的情况这对于回收对象时的判断会造成性能影响所以还应该有下面假说 跨代引用假说Intergenerational Reference Hypothesis跨代引用相对于同代引用来说仅占极少数。 上面条结论可根据前两条假说逻辑推理得出的隐含推论存在互相引用关系的两个对象是应该倾向于同时生存或者同时消亡的。 下面是一些常见的分代收集名词 部分收集Partial GC指目标不是完整收集整个Java堆的垃圾收集其中又分为 新生代收集Minor GC/Young GC指目标只是新生代的垃圾收集。 老年代收集Major GC/Old GC指目标只是老年代的垃圾收集。目前只有CMS收集器会有单独收集老年代的行为。 混合收集Mixed GC指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。 整堆收集Full GC收集整个Java堆和方法区的垃圾收集。
标记-清除算法 标记-清除算法Mark and Sweep Algorithm是一种经典的垃圾回收算法用于识别和释放不再被引用的对象从而回收内存空间。它包括两个主要阶段标记Mark和清除Sweep。 下面是标记-清除算法的工作原理 标记Mark阶段 从根对象通常是程序的入口点或全局变量开始遍历整个对象图标记所有可以从根对象访问到的对象。在这个阶段被标记的对象通常被打上一个标记位或者加入一个已标记的集合中以表示它们是活跃对象仍然被引用。 清除Sweep阶段 在清除阶段垃圾回收器遍历整个堆内存找到所有未被标记的对象这些对象是不再被引用的对象。未被标记的对象被认为是垃圾垃圾回收器会将它们的内存空间标记为可用空闲空间以供将来的对象分配使用。清除后堆内存中只剩下被标记的对象而未被标记的对象的内存已经被释放。
上面有一点需要注意的是标记对象可以是所有需要回收的对象在标记完成后统一回收掉所有被标记的对象也可以反过来标记存活的对象统一回收所有未被标记的对象。 下面是标记-清除算法的示意图 标记-清除算法的优点是它可以回收不再被引用的对象但它也有一些缺点 碎片问题标记-清除算法会在内存中留下不连续的空闲块可能导致内存碎片化问题。这会增加分配大对象时的空间不足问题的风险。效率问题标记-清除算法需要两次遍历整个堆内存一次标记一次清除。这会产生额外的性能开销尤其是在清除阶段。停顿问题标记-清除算法在清除阶段需要停止应用程序的执行因为它需要整个堆内存处于不变状态才能执行清除操作。这可能导致应用程序在垃圾回收期间出现停顿影响用户体验。 标记-复制算法 标记-复制算法Mark and Copy Algorithm是一种用于垃圾回收的算法它解决了标记-清除算法中出现的内存碎片问题。标记-复制算法主要用于新生代Young Generation的垃圾回收通常分为两个阶段标记Mark和复制Copy。 下面是标记-复制算法的工作原理 标记Mark阶段 从根对象通常是程序的入口点或全局变量开始遍历整个对象图标记所有可以从根对象访问到的对象这些对象被认为是活跃对象。在这个阶段被标记的对象通常被打上一个标记位或者加入一个已标记的集合中以表示它们是活跃对象仍然被引用。 复制Copy阶段 在复制阶段垃圾回收器会将所有被标记为活跃对象的对象从一个区域通常称为From或Eden区复制到另一个区域通常称为To或Survivor区。复制后所有被复制的对象都连续排列在一起没有碎片而From区变成了空的。 清理Clean-Up阶段 清理阶段不再需要被复制的对象因此整个From区可以被清空成为新的可用空间用于将来的对象分配。
示意图如下 标记-复制算法的主要优点是它有效地解决了内存碎片问题。因为被复制的对象都被整齐地排列在一起From区变为空所以不会出现内存碎片化的情况。这提高了内存的利用率减少了分配大对象时可能出现的空间不足问题。缺点就是比较浪费空间。 标记-复制算法主要用于新生代的垃圾回收而老年代通常使用其他算法如标记-清除或标记-整理算法。这些不同的垃圾回收算法结合在一起构成了现代Java虚拟机中的复杂垃圾回收策略以提高内存管理的效率和性能。 标记-整理算法 标记-整理算法Mark and Compact Algorithm是一种用于垃圾回收的算法通常用于老年代Old Generation的内存回收。它是标记-清除算法的改进版本主要解决了标记-清除算法可能导致的内存碎片问题。 相较于标记-清楚算法只是多了一个整理的过程 整理Compact阶段 在整理阶段垃圾回收器会将所有被标记为活跃对象的对象向一端移动以便它们连续排列在一起。同时未被标记/被标记的对象都被认为是垃圾不再需要它们的内存空间会被释放。整理后内存中的活跃对象变得更加紧凑没有碎片可以提高内存的利用率。 示意图如下