中国最大的网站制作公司数字资产交易网站开发

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

中国最大的网站制作公司,数字资产交易网站开发,电子商务网站建设规模计划,网站开发实战演练主要垃圾收集器如下#xff0c;图中标出了它们的工作区域、垃圾收集算法#xff0c;以及配合关系。 HotSpot虚拟机垃圾收集器 这些收集器里#xff0c;面试的重点是两个——CMS和G1。 Serial 收集器 Serial#xff08;串行#xff09;收集器是最基本、历史最悠久的垃圾…主要垃圾收集器如下图中标出了它们的工作区域、垃圾收集算法以及配合关系。 HotSpot虚拟机垃圾收集器 这些收集器里面试的重点是两个——CMS和G1。 Serial 收集器 Serial串行收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程 Stop The World 直到它收集结束。 新生代采用标记-复制算法老年代采用标记-整理算法。 Serial/Serial Old 收集器的运行过程如图 虚拟机的设计者们当然知道 Stop The World 带来的不良用户体验所以在后续的垃圾收集器设计中停顿时间在不断缩短仍然还有停顿寻找最优秀的垃圾收集器的过程仍然在继续。 但是 Serial 收集器有没有优于其他垃圾收集器的地方呢当然有它简单而高效与其他收集器的单线程相比。Serial 收集器由于没有线程交互的开销自然可以获得很高的单线程收集效率。Serial 收集器对于运行在 Client 模式下的虚拟机来说是个不错的选择。 ParNew ParNew 收集器其实就是 Serial 收集器的多线程版本除了使用多线程进行垃圾收集外其余行为控制参数、收集算法、回收策略等等和 Serial 收集器完全一样。 新生代采用标记-复制算法老年代采用标记-整理算法。 ParNew/Serial Old 收集器运行示意图如下 Parallel Scavenge Parallel Scavenge 收集器是一款新生代收集器基于标记-复制算法实现也能够并行收集。和 ParNew 有些类似但 Parallel Scavenge 主要关注的是垃圾收集的吞吐量——所谓吞吐量就是 CPU 用于运行用户代码的时间和总消耗时间的比值比值越大说明垃圾收集的占比越小。 吞吐量 Serial Old Serial Old 是 Serial 收集器的老年代版本它同样是一个单线程收集器使用标记-整理算法。 Parallel Old Parallel Old 是 Parallel Scavenge 收集器的老年代版本支持多线程并发收集基于标记-整理算法实现。 这是 JDK1.8 默认收集器 使用 java -XX:PrintCommandLineFlags -version 命令查看 -XX:InitialHeapSize262921408 -XX:MaxHeapSize4206742528 -XX:PrintCommandLineFlags -XX:UseCompressedClassPointers -XX:UseCompressedOops -XX:UseParallelGC java version 1.8.0_211 Java™ SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot™ 64-Bit Server VM (build 25.211-b12, mixed mode)JDK1.8 默认使用的是 Parallel Scavenge Parallel Old如果指定了-XX:UseParallelGC 参数则默认指定了-XX:UseParallelOldGC可以使用-XX:-UseParallelOldGC 来禁用该功能。 CMS 收集器 CMSConcurrent Mark Sweep收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用。 CMSConcurrent Mark Sweep收集器是 HotSpot 虚拟机第一款真正意义上的并发收集器它第一次实现了让垃圾收集线程与用户线程基本上同时工作。 从名字中的Mark Sweep这两个词可以看出CMS 收集器是一种 “标记-清除”算法实现的它的运作过程相比于前面几种垃圾收集器来说更加复杂一些。整个过程分为四个步骤 初始标记 暂停所有的其他线程并记录下直接与 root 相连的对象速度很快 并发标记 同时开启 GC 和用户线程用一个闭包结构去记录可达对象。但在这个阶段结束这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。重新标记 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录这个阶段的停顿时间一般会比初始标记阶段的时间稍长远远比并发标记阶段时间短并发清除 开启用户线程同时 GC 线程开始对未标记的区域做清扫。 CMS 收集器 从它的名字就可以看出它是一款优秀的垃圾收集器主要优点并发收集、低停顿。但是它有下面三个明显的缺点 对 CPU 资源敏感无法处理浮动垃圾它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生。 G1收集器 G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足 GC 停顿时间要求的同时,还具备高吞吐量性能特征. 被视为 JDK1.7 中 HotSpot 虚拟机的一个重要进化特征。它具备以下特点 并行与并发G1 能充分利用 CPU、多核环境下的硬件优势使用多个 CPUCPU 或者 CPU 核心来缩短 Stop-The-World 停顿时间。部分其他收集器原本需要停顿 Java 线程执行的 GC 动作G1 收集器仍然可以通过并发的方式让 java 程序继续执行。分代收集虽然 G1 可以不需要其他收集器配合就能独立管理整个 GC 堆但是还是保留了分代的概念。空间整合与 CMS 的“标记-清除”算法不同G1 从整体来看是基于“标记-整理”算法实现的收集器从局部上来看是基于“标记-复制”算法实现的。可预测的停顿这是 G1 相对于 CMS 的另一个大优势降低停顿时间是 G1 和 CMS 共同的关注点但 G1 除了追求低停顿外还能建立可预测的停顿时间模型能让使用者明确指定在一个长度为 M 毫秒的时间片段内消耗在垃圾收集上的时间不得超过 N 毫秒。 G1 收集器的运作大致分为以下几个步骤 初始标记并发标记最终标记筛选回收 G1 收集器在后台维护了一个优先列表每次根据允许的收集时间优先选择回收价值最大的 Region(这也就是它的名字 Garbage-First 的由来) 。这种使用 Region 划分内存空间以及有优先级的区域回收方式保证了 G1 收集器在有限时间内可以尽可能高的收集效率把内存化整为零。 从 JDK9 开始G1 垃圾收集器成为了默认的垃圾收集器。