imtoken钱包下载app
数字资产服务平台

imtoken钱包下载app是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

imtoken官方网址下载|zgc

时间:2024-03-07 22:20:55

G1、ZGC、ShenandoahGC高性能收集器深入剖析 - 知乎

G1、ZGC、ShenandoahGC高性能收集器深入剖析 - 知乎切换模式写文章登录/注册G1、ZGC、ShenandoahGC高性能收集器深入剖析Java全栈架构师引言我们曾对JVM中的分代GC收集器进行了全面阐述,而在本章中重点则是对JDK后续新版本中研发推出的高性能收集器进行深入剖析,但在开始前,先来看看JDK的发布记录中关于GC体系的改变:2018年9月:JDK11发布,引入Epsilon垃圾回收器,又被称为"No-0p(无操作) "回收器。同时,引入了可伸缩的低延迟垃圾回收器ZGC(Experimental)。2019年3月:JDK12发布,增强G1收集器,实现自动返还未用堆内存给操作系统。同时,引入了低停顿时间的收集器ShenandoahGC(Experimental)。2019年9月:JDK13发布,增强ZGC收集器,实现自动返还未用堆内存给操作系统。2020年3月:JDK14发布,剔除了CMS收集器,同时扩展ZGC在macOS和Windows上的应用,增强G1支持NUMA架构。从如上JDK的发布日志中可以得出三款新的GC收集器,分别为:Epsilon、ZGC、ShenandoahGC,从此之后,JVM中的“GC家族”正式凑齐了十款收集器,如下图:其中Epsilon主要是用于测试的无操作收集器,如:性能测试、内存压力测试、VM接口测试等。在程序启动时选择装载Epsilon收集器,这样可以帮助我们过滤掉GC机制引起的性能假象。装配该款GC收集器的JVM,在运行期间不会发生任何GC相关的操作,程序所分配的堆空间一旦用完,Java程序就会因OOM原因退出。因为G1收集器是开启了整堆回收的里程碑,所以在分代篇中并未对它进行阐述,在该篇中会从G1收集器出发,依次对ZGC、ShenandoahGC进行全面剖析。一、开创GC“分区回收”新时代的里程碑 - G1在《分代篇》中谈到:CMS收集器是JVM中开辟并发收集的里程碑,而本次的主角G1则是开创GC分区回收新时代的里程碑。在G1之前,所有的收集器都是按部就班的执行“物理+逻辑分代”的收集原则,而在G1收集器中,开始正式将堆空间划分为“物理分区不分代”的内存结构,从此拉开了JVM分区回收的序幕。G1全称为Garbage-First Garbage Collector(垃圾优先收集器),该款收集器在JDK1.7时被引入Java,在1.7之后,我们可以通过参数-XX:+UseG1GC装配它。G1是一款专门针对于拥有多核处理器和大内存的机器的收集器,在满足了GC响应时间的延迟可控的情况下,也会尽可能提高的程序的吞吐量,官方推出该款收集器的目的在于:打算使用G1替换CMS收集器,并且让G1担当起全功能收集器的重任和期望,成为JVM中的第一款能够驾驭一切的全功能垃圾收集器。G1收集器具备如下特性:①与CMS收集器一样,能够与用户线程同时执行,完成并发收集。②GC过程会有整理内存的过程,不会产生内存碎片,并且整理空闲内存速度更快。③GC发生时,停顿时间可控,可以让程序更大程度上追求低延迟。④追求低延迟的同时,尽可能会保证高吞吐量。⑤对于堆的未使用内存可以返还给操作系统。接下来我们首先以G1的内存划分为起点出发,对该款收集器进行全面剖析。1.1、G1收集器的堆空间内存划分在G1收集器之前,Java的堆空间大致都长这个样子:到了JDK1.9时,堆空间慢慢的开始了划时代的改变,在此之前,堆空间的布局都是采用分代存储的方式,无论从逻辑上还是从物理内存上,都是分代的。但是到了Java9的时候,因为默认GC器改为了G1,所以堆中的内存区域被划为了一个个的Region区。每个分区都可能是年轻代也可能是老年代,但是在同一时刻只能属于某个代。在运行时,每个分区都会被打上唯一的分区标识。 不过在G1收集器中,年轻代Eden区、幸存区Survivor、老年代Old区这些概念依旧还存在,但却成为了逻辑上的概念,这样做的好处在于:也可以复用之前分代框架的逻辑,同时也满足了Java对象朝生夕死的特性。不过G1收集器虽然在逻辑上存在分代的概念,但不再是物理隔阂了,也就是指在物理内存上是不分代的,内存空间会被划分为一个个的Region区,这样做的好处在于:JVM不需要再为堆空间分配连续的内存,堆空间可以是不连续物理内存来组成Region的集合。 同时也带来了额外的好处:有的Region区内垃圾对象特别多,有的分区内垃圾对象很少,G1可以优先回收垃圾对象特别多的Region区,这样可以花费较少的时间来回收垃圾,这也就是G1名字的由来,即垃圾优先收集器。 在运行时,G1收集器会将堆空间变为如下结构:G1将Java堆划分为多个大小相等的独立的Region区域,不过在HotSpot的源码TARGET_REGION_NUMBER定义了Region区的数量限制为2048个(实际上允许超过这个值,但是超过这个数量后,堆空间会变的难以管理)。一般Region区的大小等于堆空间的总大小除以2048,比如目前的堆空间总大小为8GB,就是8192MB/2048=4MB,那么最终每个Region区的大小为4MB,当然也可以用参数-XX:G1HeapRegionSize强制指定每个Region区的大小,但是不推荐,毕竟默认的计算方式计算出的大小是最适合管理堆空间的。 对于这块的逻辑,在HotSpot源码的/share/vm/gc_implementation/g1/heapRegion.cpp文件中定义了具体实现,具体可以参考其内部的HeapRegion::setup_heap_region_size(size_t initial_heap_size, size_t max_heap_size)函数。默认新生代对堆内存的初始占比是5%,如果堆大小为8GB,那么年轻代占据400MB左右的内存,对应大概是100个Region区,可以通过-XX:G1NewSizePercent设置新生代初始占比。 在Java程序运行中,JVM会不停的给新生代增加更多的Region区,但是最多新生代的占比不会超过堆空间总大小的60%,可以通过-XX:G1MaxNewSizePercent调整(也不推荐,如果超过这个比例,年老代的空间会变的很小,容易触发全局GC)。新生代中的Eden区和Survivor区对应的Region区比例也跟之前一样,默认8:1:1,假设新生代现在有400个Region,那么整个新生代的占比则为Eden=320,S0/From=40,S1/To=40。G1中的年老代晋升条件和之前的无差,达到年龄阈值的对象会被转入年老代的Region区中,不同的是对于大对象的分配,在G1中不会让大对象进入年老代,在G1中由专门存放大对象的Region区叫做Humongous区,如果在分配对象时,判定出一个对象属于大对象,那么则会直接将其放入Humongous区存储。在G1中,判定一个对象是否为大对象的方式为:对象大小是否超过单个普通Region区的50%,如果超过则代表当前对象为大对象,那么该对象会被直接放入Humongous区。比如:目前是8GB的堆空间,每个Region区的大小为4MB,当一个对象大小超过2MB时则会被判定为属于大对象。如果程序运行过程中出现一个“巨型对象”,当一个Humongous区存不下时,可能会横跨多个Region区存储它。Humongous区存在的意义:可以避免一些“短命”的巨型对象直接进入年老代,节约年老代的内存空间,可以有效避免年老代因空间不足时的GC开销。当堆空间发生全局GC(FullGC)时,除开回收新生代和年老代之外,也会对Humongous区进行回收。其实在[《JVM成神路第四章:JVM运行时内存划分》中也提及过:逻辑分代+物理分区的结构是堆空间最佳的方案,所以G1的这种结构也是最理想的结构,但后续的ZGC、ShenandoahGC收集器中,因为实现方面的某些原因,导致最终无法采用这种结构。1.2、G1收集器GC类型G1中主要存在YoungGC、MixedGC以及FullGC三种GC类型,这三种GC类型分别会在不同情景下被触发。1.2.1、YoungGC前面提及过,G1对于整个堆空间所有的Region区不会在一开始就全部分配完,无论是新生代、幸存区以及年老代在最开始都是会有初始数量的,在程序运行过程中会根据需求不断增加每个分代区域的Region数量。所以YoungGC并非说Eden区放满了就会立马被触发,在G1中,当新生代区域被用完时,G1首先会大概计算一下回收当前的新生代空间需要花费多少时间,如果回收时间远远小于参数-XX:MaxGCPauseMills设定的值,那么不会触发YoungGC,而是会继续为新生代增加新的Region区用于存放新分配的对象实例。直至某次Eden区空间再次被放满并经过计算后,此次回收的耗时接近-XX:MaxGCPauseMills参数设定的值,那么才会触发YoungGC。G1收集器中的新生代收集,依旧保留了分代收集器的特性,当YoungGC被触发时,首先会将目标Region区中的存活对象移动至幸存区空间(被打着Survivor-from区标志的Region)。同时达到晋升年龄标准的对象也会被移入至年老代Region中存储。值得注意的是:G1收集器在发生YoungGC时,复制移动对象时是采用的多线程并行复制,以此来换取更优异的GC性能。 用户如若未曾显式通过-XX:MaxGCPauseMills参数设定GC预期回收停顿时间值,那么G1默认为200ms。1.2.2、MixedGCMixedGC翻译过来的意思为混合型GC,而并非是指FullGC。当整个堆中年老代的区域占有率达到参数-XX:InitiatingHeapOccupancyPercent设定的值后触发MixedGC,发生该类型GC后,会回收所有新生代Region区、部分年老代Region区(会根据期望的GC停顿时间选择合适的年老代Region区优先回收)以及大对象Humongous区。正常情况下,G1垃圾收集时会先发生MixedGC,主要采用复制算法,在GC时先将要回收的Region区中存活的对象拷贝至别的Region区内,拷贝过程中,如果发现没有足够多的空闲Region区承载拷贝对象,此时就会触发一次Full GC。1.2.3、FullGC当整个堆空间中的空闲Region不足以支撑拷贝对象或由于元数据空间满了等原因触发,在发生FullGC时,G1首先会停止系统所有用户线程,然后采用单线程进行标记、清理和压缩整理内存,以便于清理出足够多的空闲Region来供下一次MixedGC使用。但该过程是单线程串行收集的,因此这个过程非常耗时的(ShenandoahGC中采用了多线程并行收集)。其实G1收集器中并没有FullGC,,G1中的FullGC是采用serial old FullGC。因为G1在设计时的初衷就是要避免发生FullGC,如果上述两种GC发生后还是无法使得程序恢复正常执行,最终就会触发SerialOld收集器的FullGC。1.3、G1收集器垃圾回收过程G1收集器一般在发生GC时执行过程大致会分为四个步骤(主要指MixedGC):①初始标记(InitialMark):先触发STW,然后使用单条GC线程快速标记GCRoots直连的对象。②并发标记(ConcurrentMarking):与CMS的并发标记过程一致,采用多条GC线程与用户线程共同执行,根据Root根节点标记所有对象。③最终标记(Remark):同CMS的重新标记阶段,主要是为了纠正并发标记阶段因用户操作导致的错标、误标、漏标对象。④筛选回收(Cleanup):先对各个Region区的回收价值和成本进行排序,找出「回收价值最大」的Region优先回收。G1收集器正是由于「筛选回收」阶段的存在,所以才得以冠名「垃圾优先收集器」。在该阶段中,对各个Region区排序后,G1会根据用户指定的期望停顿时间(即-XX:MaxGCPauseMillis参数设定的值)选择「价值最大且最符合用户预期」的Region区进行回收,举个例子: 假设此时年老代空间共有800个Region区,并且都满了,所以此刻会触发GC。但根据GC的预期停顿时间值,本次GC只能允许停顿200ms,而G1经过前面的成本计算后,大致可推断出:本次GC回收600个Region区恰好停顿时间可控制在200ms左右,那么最终就会以「回收600个Region区」为基准触发GC,这样则能尽量确保GC导致的停顿时间可以被控制在我们指定的范围之内。不过值得注意的是:筛选回收阶段在G1收集器中是会停止所有用户线程后,采用多线程并行回收的。但实际上这个过程中可以与用户线程一起执行做到并发收集的,但因为G1只回收一部分Region区,停顿时间是可控的,因此停止用户线程后回收效率会大幅度提高。同时,假设实现并发回收,则又需要考虑用户线程执行带来的一些问题,所以综合考虑,G1中回收阶段采用了发生STW方案完成(在后续的ZGC、ShenandoahGC收集器中实现了并发回收),G1收集过程如下:在G1中不管是新生代还是年老代,回收算法都是采用复制算法,在GC发生时都会将一个Region区中存活的对象复制到另外一个Region区内。同比之前的CMS收集器采用的标-清算法而言,这种方式不会造成内存碎片,因此也不需要花费额外的成本整理内存。但自G1开始,包括之后的ZGC、ShenandoahGC收集器,从每个Region区角度看来是采用的复制算法,但从堆空间整体看来,则是采用了标-整算法,这也是所谓的“局部复制,全局标-整”。 这两种算法无论是那种都不会造成内存碎片产生,带来的好处是:在为大对象进行内存分配时,不会因为找不到连续的内存空间提前触发下一次GC,有利于程序长期运行,尤其是在大内存情况下的堆空间,带来的优势额外明显。不过注意:在内存较小的堆空间情况下,CMS的表现会优于G1收集器,平衡点在6~8GB左右。1.4、G1中三色标记-漏标问题解决方案剖析在《GC分代篇》中曾提及过:CMS收集器拉开了并发收集的新序幕,而并发收集的核心在于三色标记算法,但三色标记又注定着会出现漏标问题,所以接下来探讨一下G1收集器中解决三色算法漏标问题的手段:STAB + 写屏障。对象的读写屏障的具体实现位于HotSpot源码的:hotspot/src/share/vm/oops/oop.inline.hpp文件,其内部是通过内联方法实现(HotSpot虚拟机中写屏障的实现有好几个版本)。1.4.1、STAB解决新分配对象的漏标问题STAB全称为snapshot-at-the-beginning,其存在的意义是为了维护G1收集器GC-并发收集的正确性。GC的正确性是保证存活的对象不被回收,简单点来说就是保证回收的都是垃圾。如果是独占式收集,也就是发生STW后串行回收的方式,那GC时能够确保100%的正确性,但如若收集过程是与用户线程并发执行的,GC线程一边标记,用户线程一边执行,因而堆中的对象引用会存在变更,出现不稳定因素,最终导致标记的正确性无法得到保障。而为了解决该问题,在G1收集器中则引入了STAB机制。STAB机制中,会在GC开始标记前通过RootTracing生成的一张堆空间存活对象快照,在并发标记时,所有快照中当时存活的对象就会认为是存活的,标记过程中新分配的对象也会被标记为存活对象,不会被回收,G1通过这种方式则可确保新分配对象的GC正确性。不过在理解STAB具体操作前,先来看看Region区结构:在G1划分的堆空间中,每个Region区都包含了五个指针,分别为:bottom、previous TAMS、next TAMS、top以及end,如下图:五个指针释义如下:两个TAMS(top-at-mark-start)指针,用于记录前后两次发生并发标记时的位置。bottom指针:当前Region区分配对象的起始位置。top指针:Region区目前已用空间的位置。end指针:当前Region区能够分配的最大位置。如若感觉对于这几根指针不理解,那么你可以将Region区想象成一个透明的玻璃杯,bottom指针指向杯底位置、top指针指向杯中水位的那条线、end指针则是杯口/杯顶,也就是目前玻璃杯能够装水的最大容量。并发标记发生后,STAB具体过程如下:①第N次GC被触发,首先会将Region区的top指针赋值给nextTAMS,在「并发标记期间」新分配的对象都在nextTAMS ~ top指针之间,STAB机制能够确保这部分对象是绝对会被标记,默认为存活的。②当「并发标记」即将结束时,会将nextTAMS指针赋值给preTAMS,STAB机制紧接着会为bottom ~ preTAMS之间的对象生成一个快照文件(BitMap结构),所有垃圾对象可通过快照文件识别出来。③后续每次GC不断重复如上步骤。如下示意图中演示了两轮GC并发标记过程:①阶段是初始标记阶段,发生STW,将目标Region区的Top赋值给nextTAMS。①~②阶段是并发标记阶段,GC线程与用户线程一同执行,并发标记区内所有存活对象。②阶段中,nextTAMS ~ top指针之间是新分配的对象,这些对象被称为「隐式对象」,同时会使用一个BitMap开始记录「并发标记」期间标记的对象地址。③阶段则是清除回收阶段,将nextTAMS赋值给preTAMS(包括BitMap中的标记数据也会一同赋值给PrevBitMap),然后清理bottom ~ preTAMS之间的所有垃圾对象。对于并发标记阶段产生的「隐式对象」会在下次GC回收时再清除,如上图中的阶段⑥,会清除第一次GC-并发标记时产生的新对象。这也是STAB机制存在的弊端,会在一定程度上造成浮动垃圾出现。最终G1收集器中,通过如上机制确保了并发标记过程中,新对象不会漏标(因为压根没标记新产生的对象,直接默认为所有新对象都是活的,至于新对象到底是死是活,这件事情则留给下次GC来处理)。1.4.2、STAB+写屏障解决引用更改对象的漏标问题对于新分配的对象漏标问题在前面已经阐述过了,那么G1收集器又是如何解决「并发标记」过程中,原有对象引用发生更改导致的漏标问题呢?引用分代篇中的片段,如下:①一条用户线程在执行过程中,断开了一个未标记的白色对象连接,然后该对象又被一个已经标记成黑色的对象建立起了引用连接。如下图:白色对象断开了左侧灰色对象的引用,又与右侧的黑色对象建立了新的引用关系。②一条用户线程在执行过程中,正好在GC线程标记时,将一个灰色对象与一个未标记的白色对象之间的引用连接断开了,然后当GC标记完成这个灰色对象,将其标记为黑色后,之前断开的白色对象又重新与之建立起了引用关系。如下图:GC标记前,白色对象断开了与灰色对象的引用,四秒钟之后GC标记灰色对象完成,而此时恰巧白色对象又重新与标记结束后成为黑色的对象重新建立了引用关系。而当出现这两种情况时,因为重新建立引用的白色对象“父节点”已经被标记黑色了,所以GC线程不会再次标记该对象以及其成员对象,所以这些白色对象会被一直停留在白色集合中。最终导致的结果就是这些依旧存在引用的存活对象会被“误判”为垃圾对象清除掉。而这种情况会直接影响到应用程序的正确性,是不可接受的。先来思考一下引起漏标问题的原因: 条件一:灰色对象断开了与白色对象的引用(直接引用或间接引用都可)。 条件二:已经标为黑色的对象重新与白色对象建立了引用关系。 只有当一个对象同时满足了如上两个条件时才可发生漏标问题。 上个简单的代码案例理解一下:Object X = obj.fieldX; // 获取obj.fieldX成员对象

obj.fieldX = null; // 将原本obj.fieldX的引用断开

objA.fieldX = X; // 将断开引用的X白色对象与黑色对象objA建立引用

复制代码

从如上代码角度来看,假设obj是一个灰色对象,此时先获取它的成员fieldX并将其赋值给变量X,让其堆中实例与变量X保持着引用关系。紧接着再将obj.fieldX置空,断开与obj对象的引用关系,最后再与黑色对象objA建立起引用关系,最终关系如下:灰色对象obj,白色对象obj.fieldX/X,黑色对象objA。 白色对象X在GC机制标记灰色对象obj成员属性之前,与灰色对象断开了引用,然后又“勾搭”上了黑色对象objA,此刻白色对象X就会被永远停留在白色集合中,直至清除阶段到来,被“误判”为垃圾回收掉。在CMS中为解决该问题的手段为:写后屏障+增量更新,采用了写后屏障记录了更改引用的对象,然后通过溯源对发生改动的节点进行了重新扫描。而G1中则是通过STAB+写前屏障解决该问题,如下:// HotSpot中对象字段赋值逻辑

void oop_field_store(oop* field, oop new_value) {

*field = new_value; // 赋值操作:新值替换老值

}

// HotSpot中对象字段写屏障(最容易理解的实现版本)

void oop_field_store(oop* field, oop new_value) {

pre_write_barrier(field); // 写前屏障

*field = new_value; // 赋值操作:新值替换老值

post_write_barrier(field, value); // 写后屏障

}

复制代码

G1收集器会通过写前屏障,在引用被更改前先记录一下原本的引用信息,如下:void pre_write_barrier(oop* field) {

// 处于GC并发标记阶段且该对象没有被标记(访问)过

if($gc_phase == GC_CONCURRENT_MARK && !isMarkd(field)) {

oop old_value = *field; // 获取旧值

remark_set.add(old_value); // 记录 原来的引用对象

}

}

复制代码

G1中的这种做法思路为:保留GC开始时的对象图关系,即原始快照(SATB:Snapshot At The Beginning),并发标记过程会以最初的对象图关系进行访问,就算并发标记过程中某个对象的引用信息发生了改变,G1会通过写前屏障记录原有的对象引用关系,依旧会按照最初的对象图快照进行标记。G1处理该问题时的思路非常简单,总而言之一句话:并发标记过程中,我不管你的引用关系怎么改变,我反正就跟着最开始的对象图关系进行标记。 值得额外注意的是:GC开始前的快照是个逻辑上的概念,其实本质上G1是一直通过写前屏障维护着该快照,从而达到依据「原始快照」进行标记的目标。 G1是通过破坏「条件一:灰色对象断开了与白色对象的引用。」解决了漏标问题。上述过程中的源码并非G1的真正实现,仅是伪代码逻辑便于各位理解,真正的实现位于G1SATBCardTableModRefBS::enqueue(oop pre_val)函数中。其实在G1中引用发生更改时,会把原引用保存到satb_mark_queue中,每条线程都自带一个satb_mark_queue。在下一次的并发标记阶段,会依次处理satb_mark_queue中的对象,确保这部分对象在本轮GC中是存活的。这样STAB就保证了真正存活的对象不会被GC误回收,但同时也造成了某些应该被回收的垃圾对象逃过了GC,从而导致产生许多额外的浮动垃圾(float garbage)。1.5、G1中解决跨代引用手段 - RSet在分代篇中曾谈到过:CMS以及之前的大部分的分代收集器为了解决跨代引用问题,实现记忆集时,都采用的为卡表CardTable的结构,而在G1中则实现了一种新的数据结构:Remembered Set,简称为RSet,在有些地方也被称为“双向卡表”。在每个Region区中都存在一个RSet,其中记录了其他Region中的对象引用当前Region中对象的关系,也就是记录着“谁引用了我的对象”,属于points-into结构。而之前的卡表则是属于points-out结构,记录着“我引用了谁的对象”,在卡表中存在多个卡页,每个卡页记录着一定范围(512KB)的堆。RSet也好,CardTable也罢,其实都是记忆集的一种具体实现,你也可以将RSet理解成一种CardTable的进阶实现方式。G1中的RSet本质上就是一个哈希表结构(HashTable),Key为其他引用当前区内对象的Region起始地址,Value则是一个集合,里面的元素为其他Region中每个引用当前区内对象的地址。 在虚拟机运行期间,RSet中的引用关系靠post-write barrier和Concurrent refinement threads来维护。当发生YGC时,扫描标记对象时,只需要选定目标新生代Region的RSet作为根集,这些RSet中记录了Old → Young的跨代引用,GC扫描时只需要扫描这些RSet即可,从而避免了扫描整个Old区。而当G1发生MixedGC时,Old类型的Region也有RSet记录着Old → Old的引用关系,而Old → Young的跨代引用可以从Young类型的Region中得到,这样在发生MixedGC时也不会出现整堆扫描的情况,所以引入RSet在很大程度上减少了大量的GC工作。实际上G1中的RSet对内存的开销也并不小,当JVM中分区较多且运行时间较长的情况下,这块的内存开销可能会占用到20%以上。1.6、G1收集器总结G1收集器是开辟分区收集的里程碑,同时它也被称为垃圾优先收集器,因为G1会在后台维护着一个优先列表:CollectionSet(CSet),它记录了GC要收集的Region集合,集合里的Region可以是任意年代的。 每次GC发生时会根据「用户指定的期望停顿时间或默认的期望停顿时间」,优先从列表中选择「回收价值最大」Region区回收,这也是G1名字的由来。比如:一个Region花120ms能回收10MB垃圾,而另外一个Region花80ms能回收20MB垃圾,在回收时间有限情况下,G1当然会优先选择后面这个“性价比”更高的Region回收。这种使用Region划分内存空间以及有优先级的区域回收方式,能够确保G1收集器在有限时间内,可以尽可能达到更高的收集效率。毋庸置疑的一点,可以由用户指定「GC回收过程中的期望停顿时间」是G1的一大亮点,通过设置不同的「期望停顿时间」可以使得G1在任意场景下,都能在「吞吐量」和「响应时间/低延迟」之间取得很好的平衡。但这里设置的「期望停顿时间」值必须要符合实际,如果想着:如果设置成20ms岂不是超低延迟了?这是并不现实的,只能称为异想天开,因为G1回收阶段也需要发生STW的来根扫描、复制对象、清理对象的,所以这个「期望停顿时间」值也得有个度。与分代篇中分析PS收集器提到的一样:在追求响应时间的时候必然会牺牲吞吐量,而追求吞吐量的同时必然会牺牲响应时间。鱼和熊掌不可兼得矣。G1的默认的「停顿时间」目标为200ms,但一般而言,实际过程中中占到[几十 ~ 三百毫秒之间]都很正常,但如果我们把停顿时间调得非常低,譬如前面的20ms, 很可能出现的结果就是:由于停顿目标时间太短,导致每次选出来回收的目标Region只占堆内存很小的一部分, 收集器收集的速度逐渐跟不上分配器分配的速度,最终造成垃圾慢慢堆积,从而拖垮整个程序触发单线程的FullGC。 因为很可能一开始收集器还能从空闲的堆内存中获得一些喘息的时间,但程序运行的时间越长,对内存造成的负担就越重,最终占满堆引发FullGC,反而降低整体性能,所以实际应用中,通常把「期望停顿时间」设置为100ms~300ms之间会是比较合理的选择。1.7、什么场景下适合采用G1收集器的建议①堆空间内50%以上的内存会被存活占用的应用②分配速度和晋升速度特别快的应用③至少8GB以上堆内存的应用④采用原本分代收集器GC时间会长达1s+的应用⑤追求停顿时间在500ms以内的应用二、一款源自于JDK11的性能魔兽 - ZGC在JDK11的时候,Java再次推出一款全新的垃圾回收器ZGC,它也是一款基于分区概念的内存布局GC器,这款GC器是真正意义上的不分代收集器,因为它无论是从逻辑上,还是物理上都不再保留分代的概念。ZGC的内存结构实际上被称为分页,源于Linux Kernel 2.6中引入了标准的大页huge page,大页存在两种尺度,分别为2MB以及1GB。 Linux内核引入大页的目的主要在于为了迎合硬件发展,因为在云计算、弹性调度等技术的发展,服务器硬件的配置会越来越高,如果再依照之前标准页4KB的大小划分内存,那最终反而会影响性能。ZGC主打的是超低延迟与吞吐量,在实现时,ZGC也会在尽可能堆吞吐量影响不大的前提下,实现在任意堆内存大小下都可以把垃圾回收的停顿时间限制在10ms以内的低延迟。ZGC最初是源于Azul System公司的C4(Concurrent Continuously Compacting Collector)收集器与PauselessGC,Java引入ZGC的目的主要有如下四点:①奠定未来GC特性的基础。②为了支持超大级别堆空间(TB级别),最高支持16TB。③在最糟糕的情况下,对吞吐量的影响也不会降低超过15%。④GC触发产生的停顿时间不会偏差10ms。2.1、ZGC堆空间内存划分在ZGC中,也会把堆空间划分为一个个的Region区域,但ZGC中的Region区不存在分代的概念,它仅仅只是简单的将所有Region区分为了大、中、小三个等级,如下:小型区/页(Small):固定大小为2MB,用于分配小于256KB的对象。中型区/页(Medium):固定大小为32MB,用于分配>=256KB ~ <=4MB的对象。大型区/页(Large):没有固定大小,容量可以动态变化,但是大小必须为2MB的整数倍,专门用于存放>4MB的巨型对象。但值得一提的是:每个Large区只能存放一个大对象,也就代表着你的这个大对象多大,那么这个Large区就为多大,所以一般情况下,Large区的容量要小于Medium区,并且需要注意:Large区的空间是不会被重新分配的(稍后分析)。源码中的注释如下:实际上JDK11中的ZGC并不是因为要抛弃分代理念而不设计分代的堆空间的,因为实际上最开始分代理念被提出的本质原因是源于「大部分对象朝生夕死」这个概念的,而实际上大部分Java程序在运行时都符合这个现象,所以逻辑分代+物理不分代是堆空间最好的结构方案。但问题在于:ZGC为何不设计出分代的堆空间结构呢?其实本质原因是分代实现起来非常麻烦且复杂,所以就先实现出一个比较简单可用的单代版本,后续可能会优化改进。2.1.1、TB级别内存出处:NUMA架构前面提到过:“ZGC的目的是为了能够驾驭TB级别的超大堆空间”,但问题在于很多小伙伴的生产环境中,硬盘都不一定能够达到TB级别,那服务器怎么能有TB级的内存用于分配Java堆呢?而想要搞明白这个点就不得不提及到NUMA架构,当然,与之对应的则为UMA架构,如下:UMA架构:UMA即Uniform Memory Access Architecture(统一内存访问),UMA也就是一般正常电脑的常用架构,一块内存多颗CPU,所有CPU在处理时都去访问一块内存,所以必然就会出现竞争(争夺内存主线访问权),而操作系统为了避免竞争过程中出现安全性问题,注定着也会伴随锁概念存在,有锁在的场景定然就会影响效率。同时CPU访问内存都需要通过总线和北桥,因此当CPU核数越来越多时,渐渐的总线和北桥就成为瓶颈,从而导致使用UMA/SMP架构机器CPU核数越多,竞争会越大,性能会越低。NUMA架构:NUMA即Non Uniform Memory Access Architecture(非统一内存访问),NUMA架构下,每颗CPU都会对应有一块内存,具体内存取决于处理器的内存位置,一般与CPU对应的内存都是在主板上离该CPU最近的,CPU会优先访问这块内存,每颗CPU各自访问距离自己最近的内存,效率自然而然就提高了。 但上述内容并非重点,重点是NUMA架构允许多台机器共同组成一个服务供给外部使用,NUMA技术可以使众多服务器像单一系统那样运转,该架构在中大型系统上一直非常盛行,也是高性能的解决方案,尤其在系统延迟方面表现都很优秀,因此,实际上堆空间也可以由多台机器的内存组成。ZGC是能自动感知NUMA架构并可以充分利用NUMA架构特性的一款垃圾收集器。2.2、ZGC回收过程ZGC收集器在发生GC时,其实主要操作只有三个:标记、转移与重定位。标记:从根节点出发标记所有存活对象。转移:将需要回收区域中的存活对象转移到新的分区中。重定位:将所有指向转移前地址的指针更改为指向转移后的地址。实际上重定位动作会在标记阶段中的执行,在标记的时候如果发现指针还是引用老的地址则会修正成新的地址,然后再进行标记。 但是值得注意的是:第一次GC发生时,并不会发生重定位动作,因为已经标记完了,这个时候只会记录一下原本的对象被转移到哪儿去了。只有当第二次GC发生时,开始标记的时候发现某个对象被转移了,但引用还是老的,此时才会发生重定位操作,即修改成新的引用地址。ZGC中的一次垃圾回收过程会被分为十个步骤:初始标记、并发标记、再次标记、并发转移准备:[非强引用并发标记、重置转移集、回收无效页面(区)、选择目标回收页面、初始化转移集(表)]、初始转移、并发转移,其中只有初始标记、再次标记、初始转移阶段会存在短暂的STW,其他阶段都是并发执行的。ZGC回收过程的十个步骤中,非强引用并发标记、重置转移集、回收无效页面(区)、选择目标回收页面、初始化转移集(表)这些步骤都是并发的,都会发生在并发转移准备阶段内,如下:①初始标记 这个阶段会触发STW,仅标记根可直达的对象,并将其压入到标记栈中,在该阶段中也会发生一些其他动作,如重置 TLAB、判断是否要清除软引用等。②并发标记 根据「初始标记」的根对象开启多条GC线程,并发遍历对象图,同时也会统计每个分区/页面中的存活对象数量。 标记栈③再次标记 这个阶段也会出现短暂的STW,因为「并发标记」阶段中应用线程还是在运行的,所以会修改对象的引用导致漏标的情况出现,因此需要再次标记阶段来标记漏标的对象(如果此阶段停顿时间过长,ZGC会再次进入并发标记阶段重新标记)。④非强引用并发标记和引用并发处理 遍历前面过程中的非强引用类型根对象,但并不是所有非强根对象都可并发标记,有部分不能并发标记的非强根对象会再前面的「再次标记」阶段中处理。同时也会标记堆中的非强引用类型对象。⑤重置转移集/表重置上一次GC发生时,转移表中记录的数据,方便本次GC使用。在ZGC中,因为在回收时需要把一个分区中的存活对象转移进另外一个空闲分区中,而ZGC的转移又是并发执行的,因此,一条用户线程访问堆中的一个对象时,该对象恰巧被转移了,那么这条用户线程根据原本的指针是无法定位对象的,所以在ZGC中引入了转移表forwardingTable的概念。转移表可以理解为一个Map结构的集合,当一条线程根据指针访问一个被转移的对象时,如果该对象已经被转移,则会根据转移表的记录去新地址中查找对象,并同时会更新指针的引用。⑥回收无效分区/页面 回收物理内存已经被释放的无效的虚拟内存页面。ZGC是一款支持返还堆内存给物理机器的收集器,在机器内存紧张时会释放一些未使用的堆空间,但释放的页面需要在新一轮标记完成之后才能释放,所以在这个阶段其实回收的是上一次GC释放的空间。⑦选择待回收的分区/页面 ZGC与GC收集器一样,也会存在「垃圾优先」的特性,在标记完成后,整个堆中会有很多分区可以回收,ZGC也会筛选出回收价值最大的页面来作为本次GC回收的目标。⑧初始化待转移集合的转移表初始化待回收分区/页面的转移表,方便记录区中存活对象的转移信息。注:每个页面/分区都存在一个转移表forwardingTable。⑨初始转移 这个阶段会发生STW,遍历所有GCRoots节点及其直连对象,如果遍历到的对象在回收分区集合内,则在新的分区中为该对象分配对应的空间。不过值得注意的是:该阶段只会转移根对象(也就是GCRoots节点直连对象)。⑩并发转移 这个阶段与之前的「并发标记」很相似,从上一步转移的根对象出发,遍历目标区域中的所有对象,做并发转移处理。其实简单来说,ZGC的回收过程可以分为四大阶段:并发标记、并发转移准备、并发转移、并发重映射/定位。同时ZGC也是一款不分代的收集器,也就代表着ZGC中只存在一种GC类型,同时也不需要记忆集这种概念存在,因为是单代的堆空间,所以每次回收都是扫描所有页面,不需要额外解决跨代引用问题。2.2.1、为何Large区不能被重分配/转移呢?因为Large区中只会存储一个对象,在GC发生时标记完成后,直接决定是否回收即可,Large区中存储的对象并非不能转移到其他区,而是没有必要,本身当前Large区中就只有一个大对象,转移还得专门准备另外一个Large区接收,但本质上转不转移都不会影响,反而会增加额外的空间开销。2.2.2、ZGC的核心 - 染色指针(colored pointers)技术ColoredPointers,ZGC的核心技术之一,在此之前所有的GC信息保存在对象头中,但ZGC中的GC信息保存在指针内。同时,在ZGC中不存在指针压缩,因为ZGC中对于指针进行了改造,通过程序中的引用指针来实现了染色指针技术,由于染色指针对于指针的64个比特位全部都使用了,所以指针无法再进行压缩。 染色指针也有很多其他称呼,诸如:颜色指针、着色指针等,其实都是一个意思,无非就是将64位指针中的几位拿出来用于标记对象此时的情况,ZGC中的染色指针用到了四种“颜色(状态)”,分别为:Marked0、Marked1、Remapped、Finalizable,如下:对于上图中指针的释义,源码注释如下:从注释中可看出:0~41Bit这42位是正常的地址记录,所以ZGC实际上最大能够支持4TB(理论上最大可以支持16TB)的堆内存,因为42位的地址最大寻址为4TB(2^42=4TB)。除开这42个地址位外,其他的位数释义如下:42~45Bit/4位:标志位Finalizable=1000:此位与并发引用处理有关,表示这个对象只能通过finalizer才能访问。Remapped=0100:设置此位的值后,表示这个对象未指向RelocationSet中(relocation set表示需要GC的Region分区/页面集合)。Marked1=0010:标记对象,用于辅助GC。Marked0=0001:标记对象,用于辅助GC。46~63Bit/18位:预留位,预留给以后使用。不过我们在分析具体实现前,先来探讨几个问题。①ZGC为何仅支持4TB(JDK13拓展到了16TB),不是还有很多位没用吗? 前面分析指针后得知,ZGC在指针中预留了18位没使用,那为什么不全部用上,让ZGC支持超级巨大的堆空间。其实这跟硬件和OS有关,因为X86_64架构的硬件只有48条地址总线,硬件的主板地址总线最宽只有48bit,其中4个是颜色位,就只剩下了44位了,所以受限于目前的硬件,ZGC最大就只能支持2^44=16TB内存。②为什么会有两个Marked标识? 这是为了防止不同GC周期之间的标记混淆,所以搞了两个Marked标识,每当新的一次GC开始时,都会交换使用的标记位。例如:第一次GC使用M0,第二次GC就会使用M1,第三次又会使用M0.....,因为ZGC标记完所有分区的存活对象后,会选择分区进行回收,因此有一部分区域内的存活对象不会被转移,那么这些对象的标识就不会复位,会停留在之前的Marked标识(比如M0),如果下次GC还是使用相同M0来标记对象,那混淆了这两种对象。为了确保标记不会混淆,所以搞了两个Marked标识交替使用。③为什么ZGC运行过程中指针的标记位变动不会影响对象的内存寻址? 这是因为ZGC的染色指针用到了一种叫做多重映射的技术,也就是指多个虚拟地址指向同一个物理地址,不管指针地址是0001....还是0010.....,或者0100....等等,最终对应的都是同一个物理地址。OK,简单分析明白上述几个问题之后,再来看看ZGC基于染色指针的并发处理过程:在第一次GC发生前,堆中所有对象的标识为:Remapped。第一次GC被触发后,GC线程开始标记,开始扫描,如果对象是Remapped标志,并且该对象根节点可达的,则将其改为M0标识,表示存活对象。如果标记过程中,扫描到的对象标识已经为M0,代表该对象已经被标记过,或者是GC开始后新分配的对象,这种情况下无需处理。在GC开始后,用户线程新创建的对象,会直接标识为M0。在标记阶段,GC线程仅标记用户线程可直接访问的对象还是不够的,实际上还需要把对象的成员变量所引用的对象都进行递归标记。总归而言,在「标记阶段」结束后,对象要么是M0存活状态,要么是Remapped待回收状态。最终,所有被标记为M0状态的活跃对象都会被放入「活跃信息表」中。等到了「转移阶段」再对这些对象进行处理,流程如下:ZGC选择目标回收区域,开始并发转移。GC线程遍历访问目标区域中的对象,如果对象标识为M0并且存在于活跃表中,则把该对象转移到新的分区/页面空间中,同时将其标识修正为Remapped标志。GC线程如果扫描到的对象存在于活跃表中,但标识为Remapped,说明该对象已经转移过了,无需处理。用户线程在「转移阶段」新创建的对象,会被标识为Remapped。如果GC线程遍历到的对象不是M0状态或不在活跃表中,也无需处理。最终,当目标区域中的所有存活对象被转移到新的分区后,ZGC统一回收原本的选择的回收区域。至此,一轮GC结束,整个堆空间会正常执行下去,直至触发下一轮GC。而当下一轮GC发生时,会采用M1作为GC辅助标识,而并非M0,具体原因在前面分析过了则不再阐述。PS:在有些地方也把指针中的几个标识称为:地址视图。简单来说,地址视图指的就是此时地址指针的标记位,比如标记位现在是M0,那么此时的视图就是 M0视图。染色指针带来的好处①一旦某个分区中的存活对象被移走,该分区就可以立即回收并重用,不必等到整个堆中所有指向该Region区的引用都被修正后才能清理。②颜色指针可以大幅减少在GC过程中内存屏障的使用数量,ZGC只使用了读屏障。③颜色指针具备强大的扩展性,它可以作为一种可扩展的存储结构用来记录更多与对象标记、重定位过程相关的数据,以便日后进一步提高性能。2.2.3、何谓转移表/集(ForwardingTable)?转移表ForwardingTable是ZGC确保转移对象后,其他引用指针能够指向最新地址的一种技术,每个页面/分区中都会存在,其实就是该区中所有存活对象的转移记录,一条线程通过引用来读取对象时,发现对象被转移后就会去转移表中查询最新的地址。同时转移表中的数据会在发生第二次GC时清空重置,也包括会在第二次GC时触发重映射/重定位操作。2.3、ZGC - 读屏障解决对象漏标之前曾提及过:ZGC是通过读屏障的手段解决了对象漏标问题,读屏障也就相当于读取引用时的AOP,伪代码如下:oop oop_field_load(oop* field) {

pre_load_barrier(field); // 读屏障-读前操作

return *field;

}

void pre_load_barrier(oop* field, oop old_value) {

if($gc_phase == GC_CONCURRENT_MARK && !isMarkd(field)) {

oop old_value = *field;

remark_set.add(old_value); // 记录读取到的对象

}

}

复制代码

读屏障是在读取成员变量时,统统记录下来,这种做法是保守的,但也是安全的。因为前述分析对象漏标问题时,曾谈到过:引发漏标问题必须要满足两个条件,其中条件二为:「已经标为黑色的对象重新与白色对象建立了引用关系」,而黑色对象想要与白色对象重新建立引用的前提是:得先读取到白色对象,此时读屏障的作用就出来了,可以直接记录谁读取了当前白色对象,然后在「再次标记」重新标记一下这些黑色对象即可。通过读屏障还有另外的作用,GC发生后,堆中一部分存活对象被转移,当应用线程读取对象时,可以利用读屏障通过指针上的标志来判断对象是否被转移,如果读取的对象已经被转移,那么则修正当前对象引用为最新地址(去转移表中查)。这样做的好处在于:下次其他线程再读取该转移对象时,可以正常访问读取到最新值。 当然,这种情况在有些地方也被称为:ZGC的指针拥有“自愈”的能力。2.4、ZGC的垃圾回收什么情况下会被触发?ZGC中目前会有四种机制导致GC被触发:①定时触发,默认为不使用,可通过ZCollectionInterval参数配置。②预热触发,最多三次,在堆内存达到10%、20%、30%时触发,主要时统计GC时间,为其他GC机制使用。③分配速率,基于正态分布统计,计算内存99.9%可能的最大分配速率,以及此速率下内存将要耗尽的时间点,在耗尽之前触发GC「耗尽时间 - 一次GC最大持续时间 - 一次GC检测周期时间」。④主动触发,默认开启,可通过ZProactive参数配置,距上次GC堆内存增长10%,或超过5分钟时,对比「距上次GC的间隔时间」和「49*一次GC的最大持续时间」,超过则触发。2.5、ZGC总结ZGC因为是基于64位指针实现的染色指针技术,所以也就注定了ZGC并不能支持32位的机器。同时,ZGC通过多阶段的并发执行+几个短暂的STW阶段来达到低延迟的目的。 ZGC最大的问题是浮动垃圾,假设ZGC的一次完整GC需要八分钟,在这期间由于新对象的分配速率很高,所以堆中会产生大量的新对象,这些新对象是不会被计入本次GC的,会被直接判定为存活对象,而本轮GC回收期间可能新分配的对象会有大部分对象都成为了“垃圾”,但这些“浮动垃圾”只能等待下次GC的时候进行回收。ZGC不会因为堆空间的扩大而增大停顿时间的原因在于:ZGC只会在处理根节点等阶段才会出现STW,而堆空间再怎么扩大,内存中的根节点数量不会出现质的增长,所以ZGC的停顿时间几乎不受限于内存大小。 同时,ZGC与之前的收集器还有一点很大的不同在于:ZGC标记的是指针而并非对象,但最终达到的效果是等价的,因为所有对象以及所有指针都会被遍历。 在标记和转移的阶段,每次从堆中读取一个指针时,这个指针都会经过LVB(Loaded Value Barrier)读屏障。这个读屏障会在不同的阶段做不同的事情,在标记阶段,它会把指针“修正”成最新的对象地址值;而在转移阶段,这个屏障会把读出的指针更新到对象的新地址上,并且把堆里的这个指针“修正”到原本的字段里。这样做的好处在于:就算GC时把对象移动了,读屏障也会发现并修正指针,于是对于用户线程层面而言,就永远都会持有更新后的有效指针,而不需要通过stop-the-world这种最粗粒度的同步方式来让GC与应用之间同步。写在最后的话:ZGC的不分代其实是它的缺点,因为对象都是满足朝生夕死的特性,ZGC不分代只是因为分代比较难实现。三、一个来自JDK12的性能神兽 - ShenandoahGC在JDK11中推出ZGC后,JDK12马不停蹄的推出了ShenandoahGC收集器,它与G1、ZGC收集器一样,都是基于分区结构实现的一款收集器。和ZGC对比,相同的是:它们的停顿时间都不会受到堆空间大小的影响,但ShenandoahGC与ZGC不同的是:ZGC是基于colored pointers染色指针实现的,而ShenandoahGC是基于brooks pointers转发指针实现。ShenandoahGC的内存布局与G1很相似,也会将堆内存划分为一个个 大小相同的Region区域,也同样有存放大对象的Humongous区,你可以把ShenandoahGC看做G1收集器的修改版,它比G1收集器实现上来说更为激进,一味追求极致低延迟。但ShenandoahGC和ZGC一样,也没有实现分代的架构,所以在触发GC时也不会有新生代、年老代之说,只会存在一种覆盖全局的GC类型。3.1、ShenandoahGC收集过程ShenandoahGC的一次垃圾回收会由两个STW阶段以及两个并发执行阶段组成,在的GC被触发后,会开始对整个堆空间进行垃圾收集,过程如下:初始标记阶段:标记GCRoots直接可达的对象,会发生STW,但非常短暂。并发标记阶段:和用户线程一同工作,从根对象出发,标记堆中所有对象。最终标记阶段:同比G1、ZGC中的重新标记阶段,会触发STW,会在该阶段中修正并发标记过程中由于用户线程修改引用关系的导致的漏标错标对象,使用STAB机制实现。同时在该阶段中也会选择出回收价值最大的区域作为目标区域等待回收。并发回收阶段:与用户线程并发执行,会待回收区域中的存活对象复制到其他未使用的Region区中去,然后会将原本的Region区全部清理并回收。上述过程中,前面的阶段与G1差异不大,重点在于最后的回收阶段,它是与用户线程并发执行的,所以也会造成新的问题出现:问题①:回收过程中,如果一个对象被复制到新的区域,用户线程通过原本指针访问时如何定位对象呢? 问题②:在并发回收过程中,如果复制的时候出现了安全性问题怎么办?这两个问题在ShenandoahGC中,前者通过了BrooksPointers转发指针解决,而后者则建立在转发指针的基础上,采用了读+写屏障解决,接下来看看ShenandoahGC的核心实现:BrooksPointers转发指针。3.2、ShenandoahGC核心-BrooksPointers转发指针当对象被复制到新的区域时,用户线程如何根据指针定位到最新的对象地址呢?在前面的ZGC中可以通过染色指针+读屏障的方案获取到最新的地址,但在ShenandoahGC中却提出了另一种方案:BrooksPointers转发指针。所谓的转发指针就是在每个对象的对象头前面添加了一个新的字段,也就是对象头前面多了根指针。对于未移动的对象而言,指针指向的地址是自己,但对于移动的对象而言,该指针指向的为对象新地址中的BrooksPointers转发指针,示意图如下:因为ShenandoahGC采用了转发指针技术,所以当用户线程访问一个对象时,需要首先先找到BrooksPointers,再通过该指针中的地址找到对象。同时,如果对象被移动后,对象访问的流程就变成了这样:先找到旧的BrooksPointers,再根据旧的转发指针找到新的BrooksPointers,然后再根据新的转发指针找到对象。 相当于添加了一个句柄池的机制,类似于句柄访问的方式。ShenandoahGC通过这种技术解决了被移动对象的访问问题,但带来弊端也很明显,每次访问都需要多上至少一次额外转发。再来看看由于并发回收导致的线程安全问题,情况如下:①GC线程正在复制旧对象去到新的区域。②用户线程此时更新了原本对象的数据。③GC线程将原本旧对象的转发指针指向新对象的转发指针。分析如上情况可以得知,因为GC线程已经复制对象了,只是还没来得及更新旧对象的转发指针,所以导致了用户操作落到了旧对象上面,从而出现了安全问题。而ShenandoahGC中则采用读、写屏障确保了步骤①、③是原子性的,从而解决了该问题。3.3、ShenandoahGC的连接矩阵在G1中解决跨区引用是通过RSet这种记忆集的方式实现,而在ShenandoahGC为了记录跨区的对象引用,也提出了一种新的概念:连接矩阵,连接矩阵其实本质上类似于一个二维数组,如果第N个Region区中有对象指向RegionM区的对象,那么就在矩阵的N行M列中打上一个标记:如上图,R-3区的对象A引用了R-5区的对象B,而对象B又引用了R-7区中的对象C,那么最终在矩阵上,这些跨区引用对象所在位置就会被打上对应的标记,在回收时通过这张矩阵图就可以得出哪些Region之间产生了跨区引用。四、高性能垃圾收集器总结在三款高性能的GC器中,就目前而言,唯一保留了分代思想的是G1,而ZGC、ShenandoahGC并非是因为不分代性能好一些而不实现的,而是因为实现难度大所以才没有实现,在之前就曾提及过:逻辑分代+物理分区的结构才是最佳的,所以不分代的结构对于ZGC、ShenandoahGC来说,其实是一个缺点,因为不分代的堆空间,每次触发GC时都会扫描整堆。G1收集器在后续的JDK版本中一直在做优化,因为G1是打算作为全能的默认GC器来研发的,但G1收集器最大的遗憾和短板在于:回收阶段需要发生STW,所以导致了使用G1收集器的程序会出现不短的停顿。 而ZGC、ShenandoahGC两款收集器,前者采用了染色指针+读屏障技术做到了并发回收,后者通过转发指针+读写屏障也实现了并发回收。因此,使用这两款收集器的应用程序,在运行期间触发GC时,造成的停顿会非常短暂,所以如果你的项目对延迟要求非常低,那么它两个是很不错的选择。 不过ZGC由于承诺了最大不超过10ms的低延迟,所以最恶劣的情况可能会导致降低15%左右的吞吐量,因此,如果你想使用它,那么要做好扩大堆空间的准备,因为只能通过加大堆空间来做到提升吞吐量。而ShenandoahGC因为额外增加了转发指针,所以也存在两个问题: ①访问对象时,速度会更慢,因为需要至少经过一次地址转发。 ②需要更多的空间存储多出来的这根指针。 同时,ShenandoahGC是没有给出类似于ZGC的“最大10ms的低延迟”承诺,所以就现阶段而言,ShenandoahGC性能会比ZGC差一些,但唯一的优势在于:它可以比ZGC支持更大的堆空间(虽然没啥用)。4.1、G1、ZGC与ShenandoahGC区别对比项G1ZGCShenandoahGC是否支持并发回收不支持支持支持最大堆空间大小达到上百GB停顿时间会很长16TB256TB平均停顿500ms以内10ms以内1~20ms左右是否支持指针压缩支持不支持支持其实从上面的数据来看,好像G1收集器压根比不上其他两款,但实际上并非如此,因为每款收集器都会有自己的适用场景,就好比在几百MB的堆空间中,装载ZGC就一定比G1好吗?其实是不见得的。因为G1中存在分代的逻辑,而ZGC是单代的,所以如果在分配速率较快的情况下,ZGC可能会跟不上(因为ZGC的整个GC过程很久),而G1则可以完全胜任。同时,由于ZGC的染色指针使用了64位指针实现,所以也就代表着:在ZGC中指针压缩失效了,所以在32GB以下的堆空间中,相同的对象数据,ZGC会比其他的收集器占用的空间更多。作者:竹子爱熊猫 链接:https://juejin.cn/post/7080030329922125854发布于 2023-04-24 10:13・IP 属地湖南GC垃圾回收(计算机科学)java GC高性能服务器​赞同 14​​添加评论​分享​喜欢​收藏​申请

Java最前沿技术——ZGC - 知乎

Java最前沿技术——ZGC - 知乎切换模式写文章登录/注册Java最前沿技术——ZGC兔子牙以下文章来源于CoderW,作者CoderWZGC介绍ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求极致低延迟的实验性质的垃圾收集器,它曾经设计目标包括:停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆,未来支持16TB。基于最新的JDK15来看,“停顿时间不超过10ms”和“支持16TB的堆”这两个目标已经实现,并且官方明确指出JDK15中的ZGC不再是实验性质的垃圾收集器,且建议投入生产了。ZGC以追求低停顿为主要目标,STW的时候能控制在10ms以内。本文会从ZGC的设计思路出发,讲清楚为何ZGC能在低延时场景中的应用中有着如此卓越的表现。多重映射ZGC参照操作系统中的虚拟地址和物理地址,设计了一套内存和地址的多重映射关系。为了能更好的理解ZGC的多重映射,我们先看一下这个例子:你在你爸爸妈妈眼中是儿子,在你女朋友眼中是男朋友。在全世界人面前就是最帅的人。你还有一个名字,但名字也只是你的一个代号,并不是你本人。将这个关系画一张映射图表示:假如你的名字是全世界唯一的,通过“你的名字”、“你爸爸的儿子”、“你女朋友的男朋友”,“世界上最帅的人”最后定位到的都是你本人。现在我们再来看看ZGC的内存映射。ZGC为了能高效、灵活地管理内存,实现了两级内存管理:虚拟内存和物理内存,并且实现了物理内存和虚拟内存的映射关系。当应用程序创建对象时,首先在堆空间申请一个虚拟地址,ZGC同时会为该对象在Marked0、Marked1和Remapped三个视图空间分别申请一个虚拟地址,且这三个虚拟地址对应同一个物理地址。图中的Marked0、Marked1和Remapped三个视图是什么意思呢?这是ZGC的三个视图空间,在ZGC中这三个空间在同一时间点有且仅有一个空间有效。对照上面的例子,这三个视图分别对应的就是"你爸爸眼中",“你女朋友的眼中”,“全世界人眼中”。而三个视图里面的地址,都是虚拟地址。对应的是“你爸爸眼中的儿子”,“你女朋友眼中的男朋友”......最后,这些虚地址都能映射到同一个物理地址,这个物理地址对应上面例子中的“你本人”。用一段简单的Java代码表示这种关系:ZGC为什么这么设计呢?这就是ZGC的高明之处,利用虚拟空间换时间,这三个空间的切换是由垃圾回收的不同阶段触发的,通过限定三个空间在同一时间点有且仅有一个空间有效,高效的完成了GC过程的并发操作,具体实现会在后面讲ZGC并发处理算法的部分详细描述。染色指针染色指针是一种将信息存储在指针中的技术。我们都知道,之前的垃圾收集器都是把GC信息(标记信息、GC分代年龄..)存在对象头的Mark Word里。举个例子:如果某个人是个垃圾人,就在这个人的头上盖一个“垃圾”的章;如果这个人不是垃圾了,就把这个人头上的“垃圾”印章洗掉。而ZGC是这样做的:如果某个人是垃圾人。就在这个人的身份证信息里面标注这个人是个垃圾,以后不管这个人在哪刷身份证,别人都知道他是个垃圾人了。也许哪一天,这个人醒悟了不再是垃圾人了,就把这个人身份证里面的“垃圾”标志去掉。在这例子中,“这个人”就是一个对象,而“身份证”就是指向这个对象的指针。这种指针有一个高大上的名字——染色指针(Colored Pointer)。在64位的机器中,对象指针是64位的。ZGC使用64位地址空间的第0~43位存储对象地址,2^44 = 16TB,所以ZGC最大支持16TB的堆。而第44~47位作为颜色标志位,Marked0、Marked1和Remapped分别对应三个视图空间。第48~63位固定为0暂时没有使用。读屏障读屏障是JVM向应用代码插入一小段代码的技术。当应用线程从堆中读取对象引用时,就会执行这段代码。千万不要把这个读屏障和Java内存模型里面的读屏障搞混了,两者根本不是同一个东西,ZGC中的读屏障更像是一种AOP技术,在字节码层面或者编译代码层面给读操作增加一个额外的处理。读屏障实例:ZGC中读屏障的代码作用:GC线程和应用线程是并发执行的,所以存在应用线程去A对象内部的引用所指向的对象B的时候,这个对象B正在被GC线程移动或者其他操作,加上读屏障之后,应用线程会去探测对象B是否被GC线程操作,然后等待操作完成再读取对象,确保数据的准确性。具体的探测和操作步骤如下:这样会影响程序的性能吗?会。据测试,最多百分之4的性能损耗。但这是ZGC并发转移的基础,为了降低STW,设计者认为这点牺牲是可接受的。ZGC并发处理算法ZGC并发处理算法利用全局空间视图的切换和对象地址视图的切换,结合SATB算法实现了高效的并发。以上所有的铺垫,都是为了讲清楚ZGC的并发处理算法,在一些博文上,都说染色指针和读屏障是ZGC的核心,但都没有讲清楚两者是如何在算法里面被利用的,我认为,ZGC的并发处理算法才是ZGC的核心,染色指针和读屏障只不过是为算法服务而已。ZGC的并发处理算法三个阶段的全局视图切换如下:初始化阶段:ZGC初始化之后,整个内存空间的地址视图被设置为Remapped标记阶段:当进入标记阶段时的视图转变为Marked0(以下皆简称M0)或者Marked1(以下皆简称M1)转移阶段:从标记阶段结束进入转移阶段时的视图再次设置为Remapped标记阶段标记阶段全局视图切换到M0视图。因为应用程序和标记线程并发执行,那么对象的访问可能来自标记线程和应用程序线程。在标记阶段结束之后,对象的地址视图要么是M0,要么是Remapped。如果对象的地址视图是M0,说明对象是活跃的;如果对象的地址视图是Remapped,说明对象是不活跃的,即对象所使用的内存可以被回收。当标记阶段结束后,ZGC会把所有活跃对象的地址存到对象活跃信息表,活跃对象的地址视图都是M0。转移阶段转移阶段切换到Remapped视图。因为应用程序和转移线程也是并发执行,那么对象的访问可能来自转移线程和应用程序线程。至此,ZGC的一个垃圾回收周期中,并发标记和并发转移就结束了。为何要设计M0和M1我们提到在标记阶段存在两个地址视图M0和M1,上面的算法过程显示只用到了一个地址视图,为什么设计成两个?简单地说是为了区别前一次标记和当前标记。ZGC是按照页面进行部分内存垃圾回收的,也就是说当对象所在的页面需要回收时,页面里面的对象需要被转移,如果页面不需要转移,页面里面的对象也就不需要转移。如图,这个对象在第二次GC周期开始的时候,地址视图还是M0。如果第二次GC的标记阶段还切到M0视图的话,就不能区分出对象是活跃的,还是上一次垃圾回收标记过的。这个时候,第二次GC周期的标记阶段切到M1视图的话就可以区分了,此时这3个地址视图代表的含义是:M1:本次垃圾回收中识别的活跃对象。M0:前一次垃圾回收的标记阶段被标记过的活跃对象,对象在转移阶段未被转移,但是在本次垃圾回收中被识别为不活跃对象。Remapped:前一次垃圾回收的转移阶段发生转移的对象或者是被应用程序线程访问的对象,但是在本次垃圾回收中被识别为不活跃对象。现在,我们可以回答“使用地址视图和染色指针有什么好处”这个问题了。使用地址视图和染色指针可以加快标记和转移的速度。以前的垃圾回收器通过修改对象头的标记位来标记GC信息,这是有内存存取访问的,而ZGC通过地址视图和染色指针技术,无需任何对象访问,只需要设置地址中对应的标志位即可。这就是ZGC在标记和转移阶段速度更快的原因。当GC信息不再存储在对象头上时而存在引用指针上时,当确定一个对象已经无用的时候,可以立即重用对应的内存空间,这是把GC信息放到对象头所做不到的。ZGC垃圾回收周期ZGC采用的是标记-复制算法,标记、转移和重定位阶段几乎都是并发的,ZGC垃圾回收周期如下图所示:ZGC只有三个STW阶段:初始标记,再标记,初始转移。其中,初始标记和初始转移分别都只需要扫描所有GC Roots,其处理时间和GC Roots的数量成正比,一般情况耗时非常短;再标记阶段STW时间很短,最多1ms,超过1ms则再次进入并发标记阶段。即ZGC几乎所有暂停都只依赖于GC Roots集合大小,停顿时间不会随着堆的大小或者活跃对象的大小而增加。ZGC的发展ZGC诞生于JDK11,经过不断的完善,JDK15中的ZGC已经不再是实验性质的了。从只支持Linux/x64,到现在支持多平台;从不支持指针压缩,到支持压缩类指针.....ZGC迭代的速度非常快。在即将发布的JDK16中,ZGC将支持并发线程栈扫描(Concurrent Thread Stack Scanning),根据SPECjbb2015测试结果,实现并发线程栈扫描之后,ZGC的STW时间又能降低一个数量级,停顿时间将进入毫秒时代。ZGC是一款优秀的垃圾收集器,它借鉴了Pauseless GC,也似乎在朝着C4 GC的方向发展——引入分代思想。ZGC卓越的表现,让我们开发者看到了商用级别的GC“飞入寻常百姓家”的希望,随着JDK的发展,我相信在未来的某一天,JVM调优这种反人类的操作将不复存在,底层的GC会自适应各种情况自动优化。总结ZGC是Java的最前沿的技术的代表。ZGC追求低停顿时间,并将此做到极致,虽然牺牲了一部分的性能,但完全可以接受。其中的染色指针技术和多重映射思想也值得我们学习。ZGC多个视图之间的切换,某个瞬间,我看到了电影《信条》的影子。在G1都没有普及的今天,谈论ZGC似乎为时过早。但不管怎么样,ZGC都是一款优秀的垃圾收集器,值得我们去学习。 发布于 2021-04-14 15:56译者作家翻译​赞同 90​​7 条评论​分享​喜欢​收藏​申请

12 张图带你彻底理解 ZGC - 知乎

12 张图带你彻底理解 ZGC - 知乎切换模式写文章登录/注册12 张图带你彻底理解 ZGC采菊东篱下今天来聊一聊 ZGC。ZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。ZGC 第一次出现是在 JDK 11 中以实验性的特性引入,这也是 JDK 11 中最大的亮点。在 JDK 15 中 ZGC 不再是实验功能,可以正式投入生产使用了,使用 –XX:+UseZGC 可以启用 ZGC。ZGC 有 3 个重要特性:暂停时间不会超过 10 ms。JDK 16 发布后,GC 暂停时间已经缩小到 1 ms 以内,并且时间复杂度是 o(1),这也就是说 GC 停顿时间是一个固定值了,并不会受堆内存大小影响。下面图片来自:https://malloc.se/blog/zgc-jdk16最大支持 16TB 的大堆,最小支持 8MB 的小堆。跟 G1 相比,对应用程序吞吐量的影响小于 15 %。1 内存多重映射内存多重映射,就是使用 mmap 把不同的虚拟内存地址映射到同一个物理内存地址上。如下图:ZGC 为了更灵活高效地管理内存,使用了内存多重映射,把同一块儿物理内存映射为 Marked0、Marked1 和 Remapped 三个虚拟内存。当应用程序创建对象时,会在堆上申请一个虚拟地址,这时 ZGC 会为这个对象在 Marked0、Marked1 和 Remapped 这三个视图空间分别申请一个虚拟地址,这三个虚拟地址映射到同一个物理地址。Marked0、Marked1 和 Remapped 这三个虚拟内存作为 ZGC 的三个视图空间,在同一个时间点内只能有一个有效。ZGC 就是通过这三个视图空间的切换,来完成并发的垃圾回收。2 染色指针2.1 三色标记回顾我们知道 G1 垃圾收集器使用了三色标记,这里先做一个回顾。下面是一个三色标记过程中的对象引用示例图:总共有三种颜色,说明如下:白色:本对象还没有被标记线程访问过。灰色:本对象已经被访问过,但是本对象引用的其他对象还没有被全部访问。黑色:本对象已经被访问过,并且本对象引用的其他对象也都被访问过了。三色标记的过程如下:初始阶段,所有对象都是白色。将 GC Roots 直接引用的对象标记为灰色。处理灰色对象,把当前灰色对象引用的所有对象都变成灰色,之后将当前灰色对象变成黑色。重复步骤 3,直到不存在灰色对象为止。三色标记结束后,白色对象就是没有被引用的对象(比如上图中的 H 和 G),可以被回收了。2.2 染色指针ZGC 出现之前, GC 信息保存在对象头的 Mark Word 中。比如 64 位的 JVM,对象头的 Mark Word 中保存的信息如下图:前 62位保存了 GC 信息,最后两位保存了锁标志。ZGC 的一大创举是将 GC 信息保存在了染色指针上。染色指针是一种将少量信息直接存储在指针上的技术。在 64 位 JVM 中,对象指针是 64 位,如下图:在这个 64 位的指针上,高 16 位都是 0,暂时不用来寻址。剩下的 48 位支持的内存可以达到 256 TB(2 ^48),这可以满足多数大型服务器的需要了。不过 ZGC 并没有把 48 位都用来保存对象信息,而是用高 4 位保存了四个标志位,这样 ZGC 可以管理的最大内存可以达到 16 TB(2 ^ 44)。通过这四个标志位,JVM 可以从指针上直接看到对象的三色标记状态(Marked0、Marked1)、是否进入了重分配集(Remapped)、是否需要通过 finalize 方法来访问到(Finalizable)。无需进行对象访问就可以获得 GC 信息,这大大提高了 GC 效率。3 内存布局首先我们回顾一下 G1 垃圾收集器的内存布局。G1把整个堆分成了大小相同的 region,每个堆大约可以有 2048 个region,每个 region 大小为 1~32 MB (必须是 2 的次方)。如下图:跟 G1 类似,ZGC 的堆内存也是基于 Region 来分布,不过 ZGC 是不区分新生代老年代的。不同的是,ZGC 的 Region 支持动态地创建和销毁,并且 Region 的大小不是固定的,包括三种类型的 Region :Small Region:2MB,主要用于放置小于 256 KB 的小对象。Medium Region:32MB,主要用于放置大于等于 256 KB 小于 4 MB 的对象。Large Region:N * 2MB。这个类型的 Region 是可以动态变化的,不过必须是 2MB 的整数倍,最小支持 4 MB。每个 Large Region 只放置一个大对象,并且是不会被重分配的。4 读屏障读屏障类似于 Spring AOP 的前置增强,是 JVM 向应用代码中插入一小段代码,当应用线程从堆中读取对象的引用时,会先执行这段代码。注意:只有从堆内存中读取对象的引用时,才会执行这个代码。下面代码只有第一行需要加入读屏障。Object o = obj.FieldA

Object p = o //不是从堆中读取引用

o.dosomething() //不是从堆中读取引用

int i = obj.FieldB //不是引用类型

读屏障在解释执行时通过 load 相关的字节码指令加载数据。作用是在对象标记和转移过程中,判断对象的引用地址是否满足条件,并作出相应动作。如下图:标记、转移和重定位这些过程请看下一节。读屏障会对应用程序的性能有一定影响,据测试,对性能的最高影响达到 4%,但提高了 GC 并发能力,降低了 STW。5 GC 过程前面已经讲过,ZGC 使用内存多重映射技术,把物理内存映射为 Marked0、Marked1 和 Remapped 三个地址视图,利用地址视图的切换,ZGC 实现了高效的并发收集。ZGC 的垃圾收集过程包括标记、转移和重定位三个阶段。如下图:ZGC 初始化后,整个内存空间的地址视图被设置为 Remapped。5.1 初始标记从 GC Roots 出发,找出 GC Roots 直接引用的对象,放入活跃对象集合,这个过程需要 STW,不过 STW 的时间跟 GC Roots 数量成正比,耗时比较短。5.2 并发标记并发标记过程中,GC 线程和 Java 应用线程会并行运行。这个过程需要注意下面几点:GC 标记线程访问对象时,如果对象地址视图是 Remapped,就把对象地址视图切换到 Marked0,如果对象地址视图已经是 Marked0,说明已经被其他标记线程访问过了,跳过不处理。标记过程中Java 应用线程新创建的对象会直接进入 Marked0 视图。标记过程中Java 应用线程访问对象时,如果对象的地址视图是 Remapped,就把对象地址视图切换到 Marked0,可以参考前面讲的读屏障。标记结束后,如果对象地址视图是 Marked0,那就是活跃的,如果对象地址视图是 Remapped,那就是不活跃的。标记阶段的活跃视图也可能是 Marked1,为什么会采用两个视图呢?这里采用两个视图是为了区分前一次标记和这一次标记。如果这次标记的视图是 Marked0,那下一次并发标记就会把视图切换到 Marked1。这样做可以配合 ZGC 按照页回收垃圾的做法。如下图:第二次标记的时候,如果还是切换到 Marked0,那么 2 这个对象区分不出是活跃的还是上次标记过的。如果第二次标记切换到 Marked1,就可以区分出了。这时 Marked0 这个视图的对象就是上次标记过程被标记过活跃,转移的时候没有被转移,但这次标记没有被标记为活跃的对象。Marked1 视图的对象是这次标记被标记为活跃的对象。Remapped 视图的对象是上次垃圾回收发生转移或者是被 Java 应用线程访问过,本次垃圾回收中被标记为不活跃的对象。5.3 再标记并发标记阶段 GC 线程和 Java 应用线程并发执行,标记过程中可能会有引用关系发生变化而导致的漏标记问题。再标记阶段重新标记并发标记阶段发生变化的对象,还会对非强引用(软应用,虚引用等)进行并行标记。这个阶段需要 STW,但是需要标记的对象少,耗时很短。5.4 初始转移转移就是把活跃对象复制到新的内存,之前的内存空间可以被回收。初始转移需要扫描 GC Roots 直接引用的对象并进行转移,这个过程需要 STW,STW 时间跟 GC Roots 成正比。5.5 并发转移并发转移过程 GC 线程和 Java 线程是并发进行的。上面已经讲过,转移过程中对象视图会被切回 Remapped 。转移过程需要注意以下几点:如果 GC 线程访问对象的视图是 Marked0,则转移对象,并把对象视图设置成 Remapped。如果 GC 线程访问对象的视图是 Remapped,说明被其他 GC 线程处理过,跳过不再处理。并发转移过程中 Java 应用线程创建的新对象地址视图是 Remapped。如果 Java 应用线程访问的对象被标记为活跃并且对象视图是 Marked0,则转移对象,并把对象视图设置成 Remapped。5.6 重定位转移过程对象的地址发生了变化,在这个阶段,把所有指向对象旧地址的指针调整到对象的新地址上。6 垃圾收集算法ZGC 采用标记 - 整理算法,算法的思想是把所有存活对象移动到堆的一侧,移动完成后回收掉边界以外的对象。如下图:4.1 JDK 16 之前在 JDK 16 之前,ZGC 会预留(Reserve)一块儿堆内存,这个预留内存不能用于 Java 线程的内存分配。即使从 Java 线程的角度看堆内存已经满了也不能使用 Reserve,只有 GC 过程中搬移存活对象的时候才可以使用。如下图:这样做的好处是算法简单,非常适合并行收集。但这样做有几个问题:因为有预留内存,能给 Java 线程分配的堆内存小于 JVM 声明的堆内存。Reserve 仅仅用于存放 GC 过程中搬移的对象,有点内存浪费。因为 Reserve 不能给 GC 过程中搬移对象的 Java 线程使用,搬移线程可能会因为申请不到足够内存而不能完成对象搬移,这返回过来又会导致应用程序的 OOM。4.2 JDK 16 改进JDK 16 发布后,ZGC 支持就地搬移对象(G1 在 Full GC 的时候也是就地搬移)。这样做的好处是不用预留空闲内存了。如下图:不过就地搬移也有一定的挑战。比如:必须考虑搬移对象的顺序,否则可能会覆盖尚未移动的对象。这就需要 GC 线程之间更好的进行协作,不利于并发收集,同时也会导致搬移对象的 Java 线程需要考虑什么可以做什么不可以做。为了获得更好的 GC 表现,JDK 16 在支持就地搬移的同时,也支持预留(Reserve)堆内存的方式,并且 ZGC 不需要真的预留空闲的堆内存。默认情况下,只要有空闲的 region,ZGC 就会使用预留堆内存的方式,如果没有空闲的 region,否则 ZGC 就会启用就地搬移。如果有了空闲的 region, ZGC 又会切换到预留堆内存的搬移方式。7 总结内存多重映射和染色指针的引入,使 ZGC 的并发性能大幅度提升。ZGC 只有 3 个需要 STW 的阶段,其中初始标记和初始转移只需要扫描所有 GC Roots,STW 时间 GC Roots 的数量成正比,不会耗费太多时间。再标记过程主要处理并发标记引用地址发生变化的对象,这些对象数量比较少,耗时非常短。可见整个 ZGC 的 STW 时间几乎只跟 GC Roots 数量有关系,不会随着堆大小和对象数量的变化而变化。ZGC 也有一个缺点,就是浮动垃圾。因为 ZGC 没有分代概念,虽然 ZGC 的 STW 时间在 1ms 以内,但是 ZGC 的整个执行过程耗时还是挺长的。在这个过程中 Java 线程可能会创建大量的新对象,这些对象会成为浮动垃圾,只能等下次 GC 的时候进行回收。来源发布于 2022-02-28 15:03java GC理解力理解能力​赞同 5​​添加评论​分享​喜欢​收藏​申请

新一代垃圾回收器ZGC的探索与实践 - 美团技术团队

圾回收器ZGC的探索与实践 - 美团技术团队

美团技术团队最新文章文章存档技术沙龙关于我们© 2023 美团技术团队All rights reserved.新一代垃圾回收器ZGC的探索与实践2020年08月06日

作者: 王东 王伟

文章链接

12996字

26分钟阅读ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低延时场景中的应用和卓越表现,文章内容主要分为四部分:GC之痛:介绍实际业务中遇到的GC痛点,并分析CMS收集器和G1收集器停顿时间瓶颈;ZGC原理:分析ZGC停顿时间比G1或CMS更短的本质原因,以及背后的技术原理;ZGC调优实践:重点分享对ZGC调优的理解,并分析若干个实际调优案例;升级ZGC效果:展示在生产环境应用ZGC取得的效果。GC之痛很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰。GC停顿指垃圾回收期间STW(Stop The World),当STW时,所有应用线程停止活动,等待GC停顿结束。以美团风控服务为例,部分上游业务要求风控服务65ms内返回结果,并且可用性要达到99.99%。但因为GC停顿,我们未能达到上述可用性目标。当时使用的是CMS垃圾回收器,单次Young GC 40ms,一分钟10次,接口平均响应时间30ms。通过计算可知,有(40ms + 30ms) * 10次 / 60000ms = 1.12%的请求的响应时间会增加0 ~ 40ms不等,其中30ms * 10次 / 60000ms = 0.5%的请求响应时间会增加40ms。可见,GC停顿对响应时间的影响较大。为了降低GC停顿对系统可用性的影响,我们从降低单次GC时间和降低GC频率两个角度出发进行了调优,还测试过G1垃圾回收器,但这三项措施均未能降低GC对服务可用性的影响。CMS与G1停顿时间瓶颈在介绍ZGC之前,首先回顾一下CMS和G1的GC过程以及停顿时间的瓶颈。CMS新生代的Young GC、G1和ZGC都基于标记-复制算法,但算法具体实现的不同就导致了巨大的性能差异。标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中。标记-复制算法可以分为三个阶段:标记阶段,即从GC Roots集合开始,标记活跃对象;转移阶段,即把活跃对象复制到新的内存地址上;重定位阶段,因为转移导致对象的地址发生了变化,在重定位阶段,所有指向对象旧地址的指针都要调整到对象新的地址上。下面以G1为例,通过G1中标记-复制算法过程(G1的Young GC和Mixed GC均采用该算法),分析G1停顿耗时的主要瓶颈。G1垃圾回收周期如下图所示:G1的混合回收过程可以分为标记阶段、清理阶段和复制阶段。标记阶段停顿分析初始标记阶段:初始标记阶段是指从GC Roots出发标记全部直接子节点的过程,该阶段是STW的。由于GC Roots数量不多,通常该阶段耗时非常短。并发标记阶段:并发标记阶段是指从GC Roots开始对堆中对象进行可达性分析,找出存活对象。该阶段是并发的,即应用线程和GC线程可以同时活动。并发标记耗时相对长很多,但因为不是STW,所以我们不太关心该阶段耗时的长短。再标记阶段:重新标记那些在并发标记阶段发生变化的对象。该阶段是STW的。清理阶段停顿分析清理阶段清点出有存活对象的分区和没有存活对象的分区,该阶段不会清理垃圾对象,也不会执行存活对象的复制。该阶段是STW的。复制阶段停顿分析复制算法中的转移阶段需要分配新内存和复制对象的成员变量。转移阶段是STW的,其中内存分配通常耗时非常短,但对象成员变量的复制耗时有可能较长,这是因为复制耗时与存活对象数量与对象复杂度成正比。对象越复杂,复制耗时越长。四个STW过程中,初始标记因为只标记GC Roots,耗时较短。再标记因为对象数少,耗时也较短。清理阶段因为内存分区数量少,耗时也较短。转移阶段要处理所有存活的对象,耗时会较长。因此,G1停顿时间的瓶颈主要是标记-复制中的转移阶段STW。为什么转移阶段不能和标记阶段一样并发执行呢?主要是G1未能解决转移过程中准确定位对象地址的问题。G1的Young GC和CMS的Young GC,其标记-复制全过程STW,这里不再详细阐述。ZGC原理全并发的ZGC与CMS中的ParNew和G1类似,ZGC也采用标记-复制算法,不过ZGC对该算法做了重大改进:ZGC在标记、转移和重定位阶段几乎都是并发的,这是ZGC实现停顿时间小于10ms目标的最关键原因。ZGC垃圾回收周期如下图所示:ZGC只有三个STW阶段:初始标记,再标记,初始转移。其中,初始标记和初始转移分别都只需要扫描所有GC Roots,其处理时间和GC Roots的数量成正比,一般情况耗时非常短;再标记阶段STW时间很短,最多1ms,超过1ms则再次进入并发标记阶段。即,ZGC几乎所有暂停都只依赖于GC Roots集合大小,停顿时间不会随着堆的大小或者活跃对象的大小而增加。与ZGC对比,G1的转移阶段完全STW的,且停顿时间随存活对象的大小增加而增加。ZGC关键技术ZGC通过着色指针和读屏障技术,解决了转移过程中准确访问对象的问题,实现了并发转移。大致原理描述如下:并发转移中“并发”意味着GC线程在转移对象的过程中,应用线程也在不停地访问对象。假设对象发生转移,但对象地址未及时更新,那么应用线程可能访问到旧地址,从而造成错误。而在ZGC中,应用线程访问对象将触发“读屏障”,如果发现对象被移动了,那么“读屏障”会把读出来的指针更新到对象的新地址上,这样应用线程始终访问的都是对象的新地址。那么,JVM是如何判断对象被移动过呢?就是利用对象引用的地址,即着色指针。下面介绍着色指针和读屏障技术细节。着色指针着色指针是一种将信息存储在指针中的技术。ZGC仅支持64位系统,它把64位虚拟地址空间划分为多个子空间,如下图所示:其中,[0~4TB) 对应Java堆,[4TB ~ 8TB) 称为M0地址空间,[8TB ~ 12TB) 称为M1地址空间,[12TB ~ 16TB) 预留未使用,[16TB ~ 20TB) 称为Remapped空间。当应用程序创建对象时,首先在堆空间申请一个虚拟地址,但该虚拟地址并不会映射到真正的物理地址。ZGC同时会为该对象在M0、M1和Remapped地址空间分别申请一个虚拟地址,且这三个虚拟地址对应同一个物理地址,但这三个空间在同一时间有且只有一个空间有效。ZGC之所以设置三个虚拟地址空间,是因为它使用“空间换时间”思想,去降低GC停顿时间。“空间换时间”中的空间是虚拟空间,而不是真正的物理空间。后续章节将详细介绍这三个空间的切换过程。与上述地址空间划分相对应,ZGC实际仅使用64位地址空间的第0~41位,而第42~45位存储元数据,第47~63位固定为0。ZGC将对象存活信息存储在42~45位中,这与传统的垃圾回收并将对象存活信息放在对象头中完全不同。读屏障读屏障是JVM向应用代码插入一小段代码的技术。当应用线程从堆中读取对象引用时,就会执行这段代码。需要注意的是,仅“从堆中读取对象引用”才会触发这段代码。读屏障示例:Object o = obj.FieldA // 从堆中读取引用,需要加入屏障

Object p = o // 无需加入屏障,因为不是从堆中读取引用

o.dosomething() // 无需加入屏障,因为不是从堆中读取引用

int i = obj.FieldB //无需加入屏障,因为不是对象引用

ZGC中读屏障的代码作用:在对象标记和转移过程中,用于确定对象的引用地址是否满足条件,并作出相应动作。ZGC并发处理演示接下来详细介绍ZGC一次垃圾回收周期中地址视图的切换过程:初始化:ZGC初始化之后,整个内存空间的地址视图被设置为Remapped。程序正常运行,在内存中分配对象,满足一定条件后垃圾回收启动,此时进入标记阶段。并发标记阶段:第一次进入标记阶段时视图为M0,如果对象被GC标记线程或者应用线程访问过,那么就将对象的地址视图从Remapped调整为M0。所以,在标记阶段结束之后,对象的地址要么是M0视图,要么是Remapped。如果对象的地址是M0视图,那么说明对象是活跃的;如果对象的地址是Remapped视图,说明对象是不活跃的。并发转移阶段:标记结束后就进入转移阶段,此时地址视图再次被设置为Remapped。如果对象被GC转移线程或者应用线程访问过,那么就将对象的地址视图从M0调整为Remapped。其实,在标记阶段存在两个地址视图M0和M1,上面的过程显示只用了一个地址视图。之所以设计成两个,是为了区别前一次标记和当前标记。也即,第二次进入并发标记阶段后,地址视图调整为M1,而非M0。着色指针和读屏障技术不仅应用在并发转移阶段,还应用在并发标记阶段:将对象设置为已标记,传统的垃圾回收器需要进行一次内存访问,并将对象存活信息放在对象头中;而在ZGC中,只需要设置指针地址的第42~45位即可,并且因为是寄存器访问,所以速度比访问内存更快。ZGC调优实践ZGC不是“银弹”,需要根据服务的具体特点进行调优。网络上能搜索到实战经验较少,调优理论需自行摸索,我们在此阶段也耗费了不少时间,最终才达到理想的性能。本文的一个目的是列举一些使用ZGC时常见的问题,帮助大家使用ZGC提高服务可用性。调优基础知识理解ZGC重要配置参数以我们服务在生产环境中ZGC参数配置为例,说明各个参数的作用:重要参数配置样例:-Xms10G -Xmx10G

-XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

-XX:ConcGCThreads=2 -XX:ParallelGCThreads=6

-XX:ZCollectionInterval=120 -XX:ZAllocationSpikeTolerance=5

-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive

-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/logs/logs/gc-%t.log:time,tid,tags:filecount=5,filesize=50m

-Xms -Xmx:堆的最大内存和最小内存,这里都设置为10G,程序的堆内存将保持10G不变。

-XX:ReservedCodeCacheSize -XX:InitialCodeCacheSize:设置CodeCache的大小, JIT编译的代码都放在CodeCache中,一般服务64m或128m就已经足够。我们的服务因为有一定特殊性,所以设置的较大,后面会详细介绍。

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC:启用ZGC的配置。

-XX:ConcGCThreads:并发回收垃圾的线程。默认是总核数的12.5%,8核CPU默认是1。调大后GC变快,但会占用程序运行时的CPU资源,吞吐会受到影响。

-XX:ParallelGCThreads:STW阶段使用线程数,默认是总核数的60%。

-XX:ZCollectionInterval:ZGC发生的最小时间间隔,单位秒。

-XX:ZAllocationSpikeTolerance:ZGC触发自适应算法的修正系数,默认2,数值越大,越早的触发ZGC。

-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive:是否启用主动回收,默认开启,这里的配置表示关闭。

-Xlog:设置GC日志中的内容、格式、位置以及每个日志的大小。理解ZGC触发时机相比于CMS和G1的GC触发机制,ZGC的GC触发机制有很大不同。ZGC的核心特点是并发,GC过程中一直有新的对象产生。如何保证在GC完成之前,新产生的对象不会将堆占满,是ZGC参数调优的第一大目标。因为在ZGC中,当垃圾来不及回收将堆占满时,会导致正在运行的线程停顿,持续时间可能长达秒级之久。ZGC有多种GC触发机制,总结如下:阻塞内存分配请求触发:当垃圾来不及回收,垃圾将堆占满时,会导致部分线程阻塞。我们应当避免出现这种触发方式。日志中关键字是“Allocation Stall”。基于分配速率的自适应算法:最主要的GC触发方式,其算法原理可简单描述为”ZGC根据近期的对象分配速率以及GC时间,计算出当内存占用达到什么阈值时触发下一次GC”。自适应算法的详细理论可参考彭成寒《新一代垃圾回收器ZGC设计与实现》一书中的内容。通过ZAllocationSpikeTolerance参数控制阈值大小,该参数默认2,数值越大,越早的触发GC。我们通过调整此参数解决了一些问题。日志中关键字是“Allocation Rate”。基于固定时间间隔:通过ZCollectionInterval控制,适合应对突增流量场景。流量平稳变化时,自适应算法可能在堆使用率达到95%以上才触发GC。流量突增时,自适应算法触发的时机可能会过晚,导致部分线程阻塞。我们通过调整此参数解决流量突增场景的问题,比如定时活动、秒杀等场景。日志中关键字是“Timer”。主动触发规则:类似于固定间隔规则,但时间间隔不固定,是ZGC自行算出来的时机,我们的服务因为已经加了基于固定时间间隔的触发机制,所以通过-ZProactive参数将该功能关闭,以免GC频繁,影响服务可用性。 日志中关键字是“Proactive”。预热规则:服务刚启动时出现,一般不需要关注。日志中关键字是“Warmup”。外部触发:代码中显式调用System.gc()触发。 日志中关键字是“System.gc()”。元数据分配触发:元数据区不足时导致,一般不需要关注。 日志中关键字是“Metadata GC Threshold”。理解ZGC日志一次完整的GC过程,需要注意的点已在图中标出。注意:该日志过滤了进入安全点的信息。正常情况,在一次GC过程中还穿插着进入安全点的操作。GC日志中每一行都注明了GC过程中的信息,关键信息如下:Start:开始GC,并标明的GC触发的原因。上图中触发原因是自适应算法。Phase-Pause Mark Start:初始标记,会STW。Phase-Pause Mark End:再次标记,会STW。Phase-Pause Relocate Start:初始转移,会STW。Heap信息:记录了GC过程中Mark、Relocate前后的堆大小变化状况。High和Low记录了其中的最大值和最小值,我们一般关注High中Used的值,如果达到100%,在GC过程中一定存在内存分配不足的情况,需要调整GC的触发时机,更早或者更快地进行GC。GC信息统计:可以定时的打印垃圾收集信息,观察10秒内、10分钟内、10个小时内,从启动到现在的所有统计信息。利用这些统计信息,可以排查定位一些异常点。日志中内容较多,关键点已用红线标出,含义较好理解,更详细的解释大家可以自行在网上查阅资料。理解ZGC停顿原因我们在实战过程中共发现了6种使程序停顿的场景,分别如下:GC时,初始标记:日志中Pause Mark Start。GC时,再标记:日志中Pause Mark End。GC时,初始转移:日志中Pause Relocate Start。内存分配阻塞:当内存不足时线程会阻塞等待GC完成,关键字是”Allocation Stall”。安全点:所有线程进入到安全点后才能进行GC,ZGC定期进入安全点判断是否需要GC。先进入安全点的线程需要等待后进入安全点的线程直到所有线程挂起。dump线程、内存:比如jstack、jmap命令。

调优案例我们维护的服务名叫Zeus,它是美团的规则平台,常用于风控场景中的规则管理。规则运行是基于开源的表达式执行引擎Aviator。Aviator内部将每一条表达式转化成Java的一个类,通过调用该类的接口实现表达式逻辑。Zeus服务内的规则数量超过万条,且每台机器每天的请求量几百万。这些客观条件导致Aviator生成的类和方法会产生很多的ClassLoader和CodeCache,这些在使用ZGC时都成为过GC的性能瓶颈。接下来介绍两类调优案例。内存分配阻塞,系统停顿可达到秒级案例一:秒杀活动中流量突增,出现性能毛刺日志信息:对比出现性能毛刺时间点的GC日志和业务日志,发现JVM停顿了较长时间,且停顿时GC日志中有大量的“Allocation Stall”日志。分析:这种案例多出现在“自适应算法”为主要GC触发机制的场景中。ZGC是一款并发的垃圾回收器,GC线程和应用线程同时活动,在GC过程中,还会产生新的对象。GC完成之前,新产生的对象将堆占满,那么应用线程可能因为申请内存失败而导致线程阻塞。当秒杀活动开始,大量请求打入系统,但自适应算法计算的GC触发间隔较长,导致GC触发不及时,引起了内存分配阻塞,导致停顿。解决方法:(1)开启”基于固定时间间隔“的GC触发机制:-XX:ZCollectionInterval。比如调整为5秒,甚至更短。(2)增大修正系数-XX:ZAllocationSpikeTolerance,更早触发GC。ZGC采用正态分布模型预测内存分配速率,模型修正系数ZAllocationSpikeTolerance默认值为2,值越大,越早的触发GC,Zeus中所有集群设置的是5。案例二:压测时,流量逐渐增大到一定程度后,出现性能毛刺日志信息:平均1秒GC一次,两次GC之间几乎没有间隔。分析:GC触发及时,但内存标记和回收速度过慢,引起内存分配阻塞,导致停顿。解决方法:增大-XX:ConcGCThreads, 加快并发标记和回收速度。ConcGCThreads默认值是核数的1/8,8核机器,默认值是1。该参数影响系统吞吐,如果GC间隔时间大于GC周期,不建议调整该参数。GC Roots 数量大,单次GC停顿时间长案例三: 单次GC停顿时间30ms,与预期停顿10ms左右有较大差距日志信息:观察ZGC日志信息统计,“Pause Roots ClassLoaderDataGraph”一项耗时较长。分析:dump内存文件,发现系统中有上万个ClassLoader实例。我们知道ClassLoader属于GC Roots一部分,且ZGC停顿时间与GC Roots成正比,GC Roots数量越大,停顿时间越久。再进一步分析,ClassLoader的类名表明,这些ClassLoader均由Aviator组件生成。分析Aviator源码,发现Aviator对每一个表达式新生成类时,会创建一个ClassLoader,这导致了ClassLoader数量巨大的问题。在更高Aviator版本中,该问题已经被修复,即仅创建一个ClassLoader为所有表达式生成类。解决方法:升级Aviator组件版本,避免生成多余的ClassLoader。案例四:服务启动后,运行时间越长,单次GC时间越长,重启后恢复日志信息:观察ZGC日志信息统计,“Pause Roots CodeCache”的耗时会随着服务运行时间逐渐增长。分析:CodeCache空间用于存放Java热点代码的JIT编译结果,而CodeCache也属于GC Roots一部分。通过添加-XX:+PrintCodeCacheOnCompilation参数,打印CodeCache中的被优化的方法,发现大量的Aviator表达式代码。定位到根本原因,每个表达式都是一个类中一个方法。随着运行时间越长,执行次数增加,这些方法会被JIT优化编译进入到Code Cache中,导致CodeCache越来越大。解决方法:JIT有一些参数配置可以调整JIT编译的条件,但对于我们的问题都不太适用。我们最终通过业务优化解决,删除不需要执行的Aviator表达式,从而避免了大量Aviator方法进入CodeCache中。值得一提的是,我们并不是在所有这些问题都解决后才全量部署所有集群。即使开始有各种各样的毛刺,但计算后发现,有各种问题的ZGC也比之前的CMS对服务可用性影响小。所以从开始准备使用ZGC到全量部署,大概用了2周的时间。在之后的3个月时间里,我们边做业务需求,边跟进这些问题,最终逐个解决了上述问题,从而使ZGC在各个集群上达到了一个更好表现。升级ZGC效果延迟降低TP(Top Percentile)是一项衡量系统延迟的指标:TP999表示99.9%请求都能被响应的最小耗时;TP99表示99%请求都能被响应的最小耗时。在Zeus服务不同集群中,ZGC在低延迟(TP999 < 200ms)场景中收益较大:TP999:下降12~142ms,下降幅度18%~74%。TP99:下降5~28ms,下降幅度10%~47%。超低延迟(TP999 < 20ms)和高延迟(TP999 > 200ms)服务收益不大,原因是这些服务的响应时间瓶颈不是GC,而是外部依赖的性能。吞吐下降对吞吐量优先的场景,ZGC可能并不适合。例如,Zeus某离线集群原先使用CMS,升级ZGC后,系统吞吐量明显降低。究其原因有二:第一,ZGC是单代垃圾回收器,而CMS是分代垃圾回收器。单代垃圾回收器每次处理的对象更多,更耗费CPU资源;第二,ZGC使用读屏障,读屏障操作需耗费额外的计算资源。总结ZGC作为下一代垃圾回收器,性能非常优秀。ZGC垃圾回收过程几乎全部是并发,实际STW停顿时间极短,不到10ms。这得益于其采用的着色指针和读屏障技术。Zeus在升级JDK 11+ZGC中,通过将风险和问题分类,然后各个击破,最终顺利实现了升级目标,GC停顿也几乎不再影响系统可用性。最后推荐大家升级ZGC,Zeus系统因为业务特点,遇到了较多问题,而风控其他团队在升级时都非常顺利。欢迎大家加入“ZGC使用交流”群。参考文献ZGC官网彭成寒.《新一代垃圾回收器ZGC设计与实现》. 机械工业出版社, 2019.从实际案例聊聊Java应用的GC优化Java Hotspot G1 GC的一些关键技术附录如何使用新技术在生产环境升级JDK 11,使用ZGC,大家最关心的可能不是效果怎么样,而是这个新版本用的人少,网上实践也少,靠不靠谱,稳不稳定。其次是升级成本会不会很大,万一不成功岂不是白白浪费时间。所以,在使用新技术前,首先要做的是评估收益、成本和风险。评估收益对于JDK这种世界关注的程序,大版本升级所引入的新技术一般已经在理论上经过验证。我们要做的事情就是确定当前系统的瓶颈是否是新版本JDK可解决的问题,切忌问题未诊断清楚就采取措施。评估完收益之后再评估成本和风险,收益过大或者过小,其他两项影响权重就会小很多。以本文开头提到的案例为例,假设GC次数不变(10次/分钟),且单次GC时间从40ms降低10ms。通过计算,一分钟内有100/60000 = 0.17%的时间在进行GC,且期间所有请求仅停顿10ms,GC期间影响的请求数和因GC增加的延迟都有所减少。评估成本这里主要指升级所需要的人力成本。此项相对比较成熟,根据新技术的使用手册判断改动点。跟做其他项目区别不大,不再具体细说。在我们的实践中,两周时间完成线上部署,达到安全稳定运行的状态。后续持续迭代3个月,根据业务场景对ZGC进行了更契合的优化适配。评估风险升级JDK的风险可以分为三类:兼容性风险:Java程序JAR包依赖很多,升级JDK版本后程序是否能运行起来。例如我们的服务是从JDK 7升级到JDK 11,需要解决较多JAR包不兼容的问题。功能风险:运行起来后,是否会有一些组件逻辑变更,影响现有功能的逻辑。性能风险:功能如果没有问题,性能是否稳定,能稳定的在线上运行。经过分类后,每类风险的应对转化成了常见的测试问题,不再属于未知风险。风险是指不确定的事情,如果不确定的事情都能转化成可确定的事情,意味着风险已消除。升级JDK 11选择JDK 11,是因为在JDK 11中首次支持ZGC,而且JDK 11属于长期支持(Long Term Support,LTS)版本,至少会被维护三年,普通版本(如JDK 12、JDK 13和JDK 14)只有6个月的维护周期,不建议使用。本地测试环境安装从两个源OpenJDK和OracleJDK 下载JDK 11,二个版本的JDK主要区别是长时期的免费和付费,短期内都免费。注意JDK 11版本中的ZGC不支持Mac OS系统,在Mac OS系统上使用JDK 11只能用其他垃圾回收器,如G1。生产环境安装升级JDK 11不仅仅是升级自己项目的JDK版本,还需要编译、发布部署、运行、监控、性能内存分析工具等项目支持。美团内部的实践:编译打包:美团发布系统支持选择JDK 11进行编译打包。

线上运行 & 全量部署:要求线上机器已安装JDK11,有3种方式:1.新申请默认安装JDK 11的虚拟机:试用JDK 11时可用这种方式;全量部署时,如果新申请机器数量过多,可能没有足够机器资源。

2.通过手写脚本给存量虚拟机安装JDK 11:不推荐,业务同学过多参与到运维当中。

3.使用容器提供的镜像部署功能,在打包镜像时安装JDK 11:推荐方式,不需要新申请资源。监控指标:主要是GC的时间和频率,我们通过美团的CAT监控系统支持ZGC数据的收集(CAT已开源)。

性能内存分析:线上遇到性能问题时,还需要借助Profiling工具,美团的性能诊断优化平台Scalpel已支持JDK 11的性能内存分析。如果你的公司没有相关工具,推荐使用JProfier。解决组件兼容性我们的项目包含二十多万行代码,需要从JDK 7升级到JDK 11,依赖组件众多。虽然看起来升级会比较复杂,但实际只花了两天时间即解决了兼容性问题。具体过程如下:1.编译,需要修改pom文件中的build配置,根据报错作修改,主要有两类:a.一些类被删除:比如“sun.misc.BASE64Encoder”,找到替换类java.util.Base64即可。b.组件依赖版本不兼容JDK 11问题:找到对应依赖组件,搜索最新版本,一般都支持JDK 11。2.编译成功后,启动运行,此时仍有可能组件依赖版本问题,按照编译时的方式处理即可。升级所修改的依赖:

javax.annotation

javax.annotation-api

1.3.2

javax.validation

validation-api

2.0.1.Final

org.projectlombok

lombok

1.18.4

org.hibernate.validator

hibernate-validator-parent

6.0.16.Final

com.sankuai.inf

patriot-sdk

1.2.1

org.apache.commons

commons-lang3

3.9

commons-lang

commons-lang

2.6

io.netty

netty-all

4.1.39.Final

junit

junit

4.12

JDK 11已经出来两年,常见的依赖组件都有兼容性版本。但是,如果是公司内部提供的公司级组件,可能会不兼容JDK 11,需要推动相关组件进行升级。如果对方升级较为困难,可以考虑拆分功能,将依赖这些组件的功能单独部署,继续使用低版本JDK。随着JDK11的卓越性能被大家悉知,相信会有更多团队会用JDK 11解决GC问题,使用者越多,各个组件升级的动力也会越大。验证功能正确性通过完备的单测、集成和回归测试,保证功能正确性。作者简介王东,美团信息安全资深工程师。王伟,美团信息安全技术专家。安全, 基础研发平台, ZGC, 运维, G1, CMS, GC#看看其他前一篇: 美团搜索中NER技术的探索与实践

后一篇: Kubernetes如何改变美团的云基础设施?#一起聊聊如发现文章有错误、对内容有疑问,都可以关注美团技术团队微信公众号(meituantech),在后台给我们留言。分享一线技术实践,沉淀成长学

ZGC 原理是什么,它为什么能做到低延时? - 知乎

ZGC 原理是什么,它为什么能做到低延时? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册GC垃圾回收(计算机科学)java GCZGCZGC 原理是什么,它为什么能做到低延时?JDK 11将引入实验性的 ZGC,看介绍平均暂停时间低到1ms 左右,那么它是如何做到的?显示全部 ​关注者499被浏览167,864关注问题​写回答​邀请回答​好问题 12​1 条评论​分享​13 个回答默认排序RednaxelaFX​计算机科学等 7 个话题下的优秀答主​ 关注ZGC所采用的算法就是Azul Systems很多年前提出的Pauseless GC而实现上它介乎早期Azul VM的Pauseless GC与后来Zing VM的C4之间。虽然Oracle出的各种介绍资料上都完全没有提及ZGC与Azul的Pauseless GC(下面简称Azul PGC)之间的关系,而且我们从外部也无法证实或否认Oracle GC团队在研发ZGC的时候是否参考了Azul的论文,所以还不至于扣上抄袭啊克隆啊之类的帽子,但就结果来看ZGC确实就是换了一通术语、纯软件实现的Azul PGC。这周在Oracle的Santa Clara园区(旧Sun园区)刚开了JVMLS 2018,我也找机会跟ZGC的领队Per大大聊了下,抽样问了若干设计点细节之后更加确认了ZGC与Azul PGC之间的对应性——核心算法没有差异,所以想要了解原理的话只要读上面的Azul论文即可。Azul PGC简单来说是:它是一个mark-compact GC,但是GC过程中所有的阶段都设计为可以并发的,包括移动对象的阶段,所以GC正常工作的时候除了会在自己的线程上吃点CPU之外并不会显著干扰应用的运行。为了实现上方便,PGC虽然算法上可以做成完全并发,Azul PGC在Azul VM里的实现还是有三个非常短暂的safepoint,其中第一个是做根集合(root set)扫描,包括全局变量啊线程栈啊啥的里面的对象指针,但不包括GC堆里的对象指针,所以这个暂停就不会随着GC堆的大小而变化(不过会根据线程的多少啊、线程栈的大小之类的而变化)。另外两个暂停也同样不会随着堆大小而变化。这样,Azul一般在宣称PGC / C4的时候会很保守地说“暂停不会超过10ms”,实际上维持在最大暂停时间1ms并不是难事。注意是最大暂停时间,而不是平均、90%、99%。ZGC采用了同样的原理,于是也拥有相似的特性。这种并发算法的核心思想就是:在标记阶段,与其说是标记对象(记录对象是否已经被标记),不如说是标记指针(记录GC堆里的每个指针是否已经被标记)。这就与传统的三色标记对象的GC算法有非常大的区别,虽然两者从收敛性上看是等价的——最终所有对象以及所有指针都会被遍历过。在标记和移动对象的阶段,每次从GC堆里的对象的引用类型字段里读取一个指针的时候,这个指针都会经过一个“Loaded Value Barrier”(LVB)。这是一种“Read Barrier”(读屏障),会在不同阶段做不同的事情。最简单的事情就是,在标记阶段它会把指针标记上并把堆里的这个指针给“修正”到新的标记后的值;而在移动对象的阶段,这个屏障会把读出的指针更新到对象的新地址上,并且把堆里的这个指针“修正”到原本的字段里。这样就算GC把对象移动了,读屏障也会发现并修正指针,于是应用代码就永远都会持有更新后的有效指针,而不需要通过stop-the-world这种最粗粒度的同步方式来让GC与应用之间同步。LVB中有一点很重要,就是“self healing”性质:如果堆上有指针当前处于“尚未更新”的状态,一旦经过LVB之后就会被就地更新,于是在同一个GC周期内再次访问这个字段的话就不需要再修正了。这样LVB带来的性能开销(吞吐量的下降)就是非常短暂的,而不像Shenandoah GC所使用的Brooks indirection pointer那样一直都慢。Azul PGC 与 Azul Zing VM里的C4 GC之间最大的区别就是,前者不分代,而后者是分两代的pauseless GC。在Zing的内部代码里,其实C4是叫做GPGC——Generational Pauseless GC。C4的New Generation与Old Generation采用的是完全一样的Pauseless算法,两代都同样(几乎)不暂停,New GC并不会导致完全stop-the-world。这跟HotSpot VM里的分代式GC实现们很不一样——那些Young GC都是会stop-the-world的。这是因为在Zing的应用场景里,New Generation可能就已经有几十GB了,如果完全stop-the-world那根本受不了。ZGC目前不分代,所以跟Azul PGC更相似,而离C4还有距离。至于为何ZGC目前不分代,有什么技术上的考量,在JVMLS 2018的ZGC Workshop里Per大大也给出了明确的回答:因为分代实现起来麻烦,想先实现出比较简单可用的版本;后续正在考量是添加分代版ZGC好还是添加一个Thread-Local GC作为ZGC的“前端”好,目前还在探索中。Per大大毫无遮掩地表示当前的ZGC如果遇到非常高的对象分配速率(allocation rate)的话会跟不上,目前唯一有效的“调优”方式就是增大整个GC堆的大小来让ZGC有更大的喘息空间。而添加分代或者Thread-Local GC则可以有效降低这种情况下对堆大小(喘息空间)的需求。最后放俩传送门:编辑于 2018-09-05 19:26​赞同 712​​28 条评论​分享​收藏​喜欢收起​京东云​已认证账号​ 关注作者:京东科技 文涛ZGC 原理是什么?我会先从垃圾回收的必要手段介绍,基于这些手段讲解了历代垃圾回收算法是如何工作的, 从每一种算法角度理解工作原理,从而引出ZGC,方便能够循序渐进地了解。GC是Garbage Collection的缩写,顾名思义垃圾回收机制,即当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收内存空间。那么JVM的垃圾机制是如何工作的呢?第一步识别出哪些空间不再使用(识别并标记出哪些对象已死);第二步回收不再使用空间(清除已死对象 )本文所有介绍仅限于HotSpot虚拟机,

判断对象是否已死判断对象是否已死通常有两种方式 ,引用计数法和可达性分析法引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不能再被使用的。简单高效,但无法解决循环引用问题,a=b,b=a引用计数法并没有在产品级的JVM中得到应用可达性分析法这个算法的基本思路就是通过一系列的称为“ GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链( Reference Chain),当一个对象到 GC Roots没有任何引用链相连(用图论的话来说,就是从 GC Roots到这个对象不可达)时,则证明此对象是不可用的。不过可达性算法中的对象并不是立即死亡的,对象拥有一次自我拯救的机会,对象被系统宣告死亡至少要经历两次标记过程,第一次是经过可达性分析之后没有与GC Roots相连的引用链,第二次是在由虚拟机自动建立的Finalize队列中判断是否需要执行finalize()方法。HotSopt虚拟机采用该算法。清除已死对象的方式标记清除算法先标记再清除不足:1 效率问题,标记和清除效率都不高。2 空间问题,产生大量空间碎片复制算法内存分两块,A,BA用完了,将存活对象拷贝到B,A清理掉代价:内存少了一半。HotSopt虚拟机用此算法回收新生代。将新生代内存划分为8:1:1的Eden和Survivor解决复制算法内存使用率低的问题标记整理算法老年代使用,方式和标记清除类似,只是不直接清除,而是将后续对象向一端移动,并清理掉边界以外的内存。分代收集算法分代收集是一个算法方案,整合了以上算法的优点,一般是把Java堆分为新生代和老年代,在新生代中,使用复制算法老年代“标记一清理”或者“标记一整理”历代垃圾收集器简介通过上文我们了解了怎样识别垃圾,怎样清理垃圾,接下来,讲ZGC之前,我们回顾一下历代垃圾回收是怎样做的,主要是想给读者一种历史的视角,任何技术都不是凭空产生的,更多的是在前人成果之上进行优化整合我们先看一个历代JDK垃圾收集器对比表格,以下表格着重说明或引出几个问题:1 CMS从来未被当作默认GC,且已废弃2 CMS的思想其实部分被ZGC吸收,CMS已死,但他的魂还在3 JDK11、JDK17为长期迭代版本,项目中应优先使用这两个版本版本发布时间默认收集器事件jdk1.32000-05-08serialjdk1.42004-02-06ParNewjdk1.5/5.02004-09-30Parallel Scavenge/serialCMS登场jdk1.6/6.02006-12-11Parallel Scavenge/Parallel Olddk1.7/7.02011-07-28Parallel Scavenge/Parallel OldG1登场jdk1.8/8.02014-03-18Parallel Scavenge/Parallel Oldjdk1.9/9.02014-09-8G1CMS废弃jdk102018-03-21G1jdk112018-09-25G1ZGC登场jdk122019-3G1Shenandoahjdk132019-9G1jdk142020-3G1CMS移除jdk152020-9-15G1ZGC、Shenandoah转正jdk162021-3-16G1jdk172021-09-14G1ZGC分代jdk182022-3-22G1jdk192022-9-22G1GC分类我们经常在各种场景听到以下几种GC名词,Young GC、Old GC、Mixed GC、Full GC、Major GC、Minor GC,他们到底什么意思,本人进行了以下梳理首先GC分两类,Partial GC(部分回收),Full GCPartial GC:并不收集整个GC堆的模式,以下全是Partial GC的子集Young GC:只收集young gen的GCOld GC:只收集old gen的GC。只有CMS的concurrent collection是这个模式Mixed GC:只有G1有这个模式,收集整个young gen以及部分old gen的GC。Minor GC:只有G1有这个模式,收集整个young genFull GC:收集整个堆,包括young gen、old gen、perm gen(如果存在的话)等所有部分的模式。Major GC:通常是跟full GC是等价的serial收集器 单线程收集器,“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。它依然是虚拟机运行在 Client模式下的默认新生代收集器。它也有着优于其他收集器的地方:简单而高效(与其他收集器的单线程比),对于限定单个CPU的环境来说, Serial I收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。下图彩色部分说明了它的算法,简单粗暴1 停止用户线程2 单线程垃圾回收新生代3 重启用户线程ParNew收集器Parnew收集器其实就是 Serial l收集器的多线程版本。它是许多运行在 Server模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但很重要的原因是,除了 Serial 收集器外,目前只有它能与CMS收集器配合工作。Pardew收集器在单CPU的环境中绝对不会有比 Serial收集器更好的效果。它默认开启的收集线程数与CPU的数量相同,在CPU非常多(臂如32个)的环境下,可以使用-XX: ParallelGCThreads参数来限制垃圾收集的线程数。ParNew收集器追求降低GC时用户线程的停顿时间,适合交互式应用,良好的反应速度提升用户体验.下图彩色部分说明了它的算法,同样简单粗暴1 停止用户线程2 多线程垃圾回收新生代3 重启用户线程Parallel Scavenge 收集器Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器,又是并行的多线程收集器。算法的角度它和ParNew一样,在此就不画图解释了Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量( Throughput)吞吐量是指用户线程运行时间占CPU总时间的比例通过以下两种方式可达到目的:1.在多CPU环境中使用多条GC线程,从而垃圾回收的时间减少,从而用户线程停顿的时间也减少; 2.实现GC线程与用户线程并发执行。Serial Old收集器Serial Old是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用“标记整理”算法。这个收集器的主要意义也是在于给 Client模式下的虚拟机使用。如果在 Server模式下,那么它主要还有两大用途:一种用途是在JDK1.5以及之前的版本中与 ParallelScavenge收集器搭配使用,另一种用途就是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用下图彩色部分说明了它的算法,同样简单粗暴1 停止用户线程2 单线程垃圾回收老年代3 重启用户线程Parallel Old收集器Paralle Old是 Parallel Scavenge收集器的老年代版本,一般它们搭配使用,追求CPU吞吐量,使用多线程和“标记一整理”算法。下图彩色部分说明了它的算法,同样简单粗暴1 停止用户线程2 多线程垃圾回收老年代3 重启用户线程 CMS收集器以上5种垃圾回收原理不难理解,算法之所以如此简单个人理解在当时使用这种算法就够了,随着JAVA的攻城略地,有一种垃圾回收需求出现,即使用尽量短的回收停顿时间,以避免过久的影响用户线程,CMS登场了。CMS( Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。想要达到目的,就要分析GC时最占用时间的是什么操作,比较浪费时间的是标记已死对象、清除对象,那么如果可以和用户线程并发的进行,GC的停顿基本就限制在了标记所花费的时间。如上图,CMS收集器是基于“标记一清除”法实现的,它的运作过程分为4个步骤•初始标记( EMS initial mark) stop the world•并发标记( CMS concurrent mark)•重新标记( CMS remark) stop the world•并发清除( CMS concurrent sweep)初始标记的作用是查找GC Roots集合的过程,这个过程处理对象相对较少,速度很快。(为什么要进行初始标记:枚举根结点。https://www.zhihu.com/question/502729840)并发标记是实际标记所有对象是否已死的过程,比较耗时,所以采用并发的方式。重新标记主要是处理并发标记期间所产生的新的垃圾。重新标记阶段不需要再重新标记所有对象,只对并发标记阶段改动过的对象做标记即可。优点:并发收集、低停顿缺点:CMS收集器对CPU资源非常敏感。CMS收集器无法处理浮动垃圾( Floating Garbage),可能出现“Concurrent ModeFailure”失败而导致另一次 Full GC的产生。“标记一清除”法导致大量空间碎片产生,以至于老年代还有大量空间,却没有整块空间存储某对象。Concurrent ModeFailure可能原因及方案

原因1:CMS触发太晚

方案:将-XX:CMSInitiatingOccupancyFraction=N调小 (达到百分比进行垃圾回收);

原因2:空间碎片太多

方案:开启空间碎片整理,并将空间碎片整理周期设置在合理范围;

-XX:+UseCMSCompactAtFullCollection (空间碎片整理)

-XX:CMSFullGCsBeforeCompaction=n

原因3:垃圾产生速度超过清理速度

晋升阈值过小;

Survivor空间过小,导致溢出;

Eden区过小,导致晋升速率提高;存在大对象;G1收集器G1是一款面向服务端应用的垃圾收集器。下文会简单讲解一下它的“特点”和“内存分配与回收策略”,有基础或不感兴趣的同学直接跳到“G1垃圾回收流程”特点并行与并发G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短Stop-The- World停顿的时间,部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让Java程序继续执行。分代收集与其他收集器一样,分代概念在G1中依然得以保留。虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但它能够采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。空间整合与CMS的“标记一清理”算法不同,G1从整体来看是基于“标记一整理”算法实现的收集器,从局部(两个 Region之间)上来看是基于“复制”算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片,收集后能提供规整的可用内存。这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次GC。可预测的停顿这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。在G1之前的其他收集器进行收集的范围都是整个新生代或者老年代,而G1不再是这样。使用G1收集器时,Java堆的内存布局就与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域( Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分 Region(不需要连续)的集合内存分配与回收策略对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次 Minor[ˈmaɪnə(r)] GC大对象直接进入老年代所谓的大对象是指,需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组。大对象对虚拟机的内存分配来说就是一个坏消息(比遇到一个大对象更加坏的消息就是遇到一群“朝生夕灭”的“短命大对象”写程序的时候应当避免),经常出现大对象容易导致内存还有不少空间时就提前触发垃圾收集以获取足够的连续空间来“安置”它们。长期存活的对象将进入老年代虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden出生并经过第一次 Minor GC后仍然存活,并且能被 Survivor容纳的话,将被移动到 Survivor空间中,并且对象年龄设为1。对象在 Survivor区中每“熬过”一次 Minor GC,年龄就增加1岁,当它的年龄增加到一定程度(默认15岁)会被晋升到老年代中。对象晋升老年代的年龄阈值,可以通过参数据-XX : MaxTenuringThreshold设置动态对象年龄判定为了能更好地适应不同程序的内存状况,虚拟机并不是水远地要求对象的年龄必须达到了 MaxTenuringThreshold才能晋升老年代,如果在 Survivor空间中相同年龄所有对象大小的总和大于 Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到 MaxTenuringThreshold中要求的年龄。空间分配担保在发生 Minor GC之前,虚拟机会先检査老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件成立,那么 Minor GC可以确保是安全的。如果不成立,则虚拟机会查看 HandlePromotionFailure设置值是否允许担保失败。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试着进行一次 Minor GC,尽管这次 Minor GC是有风险的;如果小于,或者HandlePromotionFailure设置不允许冒险,那这时也要改为进行一次 Full GC.为什么要担保:Minor GC后还有大量对象存活且空间不够存放新对象,就要直接在老年代存放为什么是历次晋升到老年代对象的平均大小:取平均值进行比较其实仍然是一种动态概率的手段,也就是说,如果某次 Minor GCd存活后的对象突增,远远高于平均值的话,依然会导致担保失败( HandlePromotionFailure)如果出现了 HandlePromotionFailure失败,那就只好在失败后重新发起一次 Full GC。虽然担保失败时绕的子是最大的,但大部分情况下都还是会将 HandlePromotionFailure开关打开,避免 Full GC过于频繁。eden的大小范围默认是 =【-XX:G1NewSizePercent,-XX:G1MaxNewSizePercent】=【整堆5%,整堆60%】humongous如果一个对象的大小已经超过Region大小的50%了,那么就会被放入大对象专门的Region中,这种Region我们叫humongousG1垃圾回收流程网上对G1的回收阶段有不同的说法,参考Oracle JVM工程师的一个说法:他把整个 G1 的垃圾回收阶段分成了这么三个,第一个叫 Minor GC,就是对新生代的垃圾收集,第二个阶段呢叫 Minor GC + Concurrent Mark,就是新生代的垃圾收集同时呢会执行一些并发的标记,这是第二个阶段,第三个阶段呢它叫 Mixed GC 混合收集,这三个阶段是一个循环的过程。刚开始是这个新生代的垃圾收集,经过一段时间,当老年代的内存超过一个阈值了,它会在新生代垃圾收集的同时进行并发的标记,等这个阶段完成了以后,它会进行一个混合收集,混合收集就是会对新生代、幸存区还有老年代都来进行一个规模较大的一次收集,等内存释放掉了,混合收集结束。这时候伊甸园的内存都被释放掉,它会再次进入新生代的一个垃圾收集过程,那我们先来看看这个新生代的收集 Minor GC。Minor GC的回收过程(eden满了回收)选定所有Eden Region放入CSet,使用多线程复制算法将CSet的存活对象复制到Survivor Region或者晋升到Old Region。下图分7步演示了这个过程1 初始状态,堆无占用2 Eden Region满了进行标记3 将存活对象复制到Survivor Region4 清理Eden Region5 Eden Region又满了进行再次标记,此时会连带Survivor Region一起标记6 将存活对象复制到另一个Survivor Region7 再次清理Eden Region和被标记过的Survivor RegionMinor GC结束后自动进行并发标记,为以后可能的Mixed GC做准备Mixed GC的回收过程(专注垃圾最多的分区)选定所有Eden Region和全局并发标记计算得到的收益较高的部分Old Region放入CSet,使用多线程复制算法将CSet的存活对象复制到Survivor Region或者晋升到Old Region。当堆空间的占用率达到一定阈值后会触发Mixed GC(默认45%,由参数决定)Mixed GC它一定会回收年轻代,并会采集部分老年代的Region进行回收的,所以它是一个“混合”GC。下图分3步演示了这个过程1 并发标记所有Region2 并发复制3 并发清理ZGCZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。ZGC 第一次出现是在 JDK 11 中以实验性的特性引入,这也是 JDK 11 中最大的亮点。在 JDK 15 中 ZGC 不再是实验功能,可以正式投入生产使用了。目标低延迟•保证最大停顿时间在几毫秒之内,不管你堆多大或者存活的对象有多少。•可以处理 8MB-16TB 的堆通过以上历代垃圾回收器的讲解,我们大致了解到减少延迟的底层思想不外乎将stop the world进行极限压缩,将能并行的部分全部采用和用户线程并行的方式处理,然而ZGC更"过分"它甚至把一分部垃圾回收的工作交给了用户线程去做,那么它是怎么做到的呢?ZGC的标记和清理工作同CMS、G1大致差不多,仔细看下图的过程,和CMS特别像,这就是我在上文说的CMS其实并没有真正被抛弃,它的部分思想在ZGC 有发扬。ZGC 的步骤大致可分为三大阶段分别是标记、转移、重定位。标记:从根开始标记所有存活对象转移:选择部分活跃对象转移到新的内存空间上重定位:因为对象地址变了,所以之前指向老对象的指针都要换到新对象地址上。并且这三个阶段都是并发的。初始转移需要扫描 GC Roots 直接引用的对象并进行转移,这个过程需要 STW,STW 时间跟 GC Roots 成正比。并发转移准备 :分析最有回收价值GC分页(无STW) 初始转移应对初始标记的数据并发转移应对并发标记的数据 除了标记清理过程继承了CMS和G1的思想,ZGC要做了以下优化并发清理(转移对象)在 CMS 和 G1 中都用到了写屏障,而 ZGC 用到了读屏障。写屏障是在对象引用赋值时候的 AOP,而读屏障是在读取引用时的 AOP。比如 Object a = obj.foo;,这个过程就会触发读屏障。也正是用了读屏障,ZGC 可以并发转移对象,而 G1 用的是写屏障,所以转移对象时候只能 STW。简单的说就是 GC 线程转移对象之后,应用线程读取对象时,可以利用读屏障通过指针上的标志来判断对象是否被转移。读屏障会对应用程序的性能有一定影响,据测试,对性能的最高影响达到 4%,但提高了 GC 并发能力,降低了 STW。这就是上面所说的ZGC“过分”地将部分垃圾回收工作交给用户线程的原因。染色指针染色指针其实就是从 64 位的指针中,拿几位来标识对象此时的情况,分别表示 Marked0、Marked1、Remapped、Finalizable。0-41 这 42 位就是正常的地址,所以说 ZGC 最大支持 4TB (理论上可以16TB)的内存,因为就 42 位用来表示地址也因此 ZGC 不支持 32 位指针,也不支持指针压缩。其实对象只需要两个状态Marked,Remapped,对象被标记了,对象被重新映射了,为什么会有M0,M1,用来区分本次GC标记和上次GC标记以下是标记转移算法说明:1 在垃圾回收开始前:Remapped2 标记过程:标记线程访问 发现对象地址视图是 Remapped 这时候将指针标记为 M0 发现对象地址视图是 M0,则说明这个对象是标记开始之后新分配的或者已经标记过的对象,所以无需处理应用线程 如果创建新对象,则将其地址视图置为 M03 标记阶段结束后ZGC 会使用一个对象活跃表来存储这些对象地址,此时活跃的对象地址视图是 M04 并发转移阶段转移线程: 转移成功后对象地址视图被置为 Remapped(也就是说 GC 线程如果访问到对象,此时对象地址视图是 M0,并且存在或活跃表中,则将其转移,并将地址视图置为 Remapped ) 如果在活跃表中,但是地址视图已经是 Remapped 说明已经被转移了,不做处理。应用线程: 如果创建新对象,地址视图会设为 Remapped 5 下次标记使用M1M1 标识本次垃圾回收中活跃的对象M0 是上一次回收被标记的对象,但是没有被转移,且在本次回收中也没有被标记活跃的对象。 下图展示了Marked,Remapped的过程,初始化时A,B,C三个对象处于Remapped状态第一次GC,A被转移,B未被转移,C无引用将被回收第二次GC,由于A被转移过了(Remapped状态),所以被标记M1,此时恰好B为不活跃对象,将被清理第三次GC,A又被标记成M0多重映射Marked0、Marked1和Remapped三个视图ZGC为了能高效、灵活地管理内存,实现了两级内存管理:虚拟内存和物理内存,并且实现了物理内存和虚拟内存的映射关系 在ZGC中这三个空间在同一时间点有且仅有一个空间有效,利用虚拟空间换时间,这三个空间的切换是由垃圾回收的不同阶段触发的,通过限定三个空间在同一时间点有且仅有一个空间有效高效的完成GC过程的并发操作支持NUMANUMA是非一致内存访问的缩写 (Non-Uniform Memory Access,NUMA)早年如下图:SMP架构 (Symmetric Multi-Processor),因为任一个 CPU 对内存的访问速度是一致的,不用考虑不同内存地址之间的差异,所以也称一致内存访问(Uniform Memory Access, UMA )。这个核心越加越多,渐渐的总线和北桥就成为瓶颈,那不能够啊,于是就想了个办法。把 CPU 和内存集成到一个单元上,这个就是非一致内存访问 (Non-Uniform Memory Access,NUMA)。ZGC 对 NUMA 的支持是小分区分配时会优先从本地内存分配,如果本地内存不足则从远程内存分配。ZGC优劣综上分析,ZGC在战略上沿用了上几代GC的算法策略,采用并发标记,并发清理的思路,在战术上,通过染色指针、多重映射,读屏障等优化达到更理想的并发清理,通过支持NUMA达到了更快的内存操作。但ZGC同样不是银弹,它也有自身的优缺点,如下优势:1、一旦某个Region的存活对象被移走之后,这个Region立即就能够被释放和重用掉,而不必等待整个堆中所有指向该Region的引用都被修正后才能清理,这使得理论上只要还有一个空闲Region,ZGC就能完成收集。 2、颜色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量,ZGC只使用了读屏障。 3、颜色指针具备强大的扩展性,它可以作为一种可扩展的存储结构用来记录更多与对象标记、重定位过程相关的数据,以便日后进一步提高性能。 劣势:1、它能承受的对象分配速率不会太高ZGC准备要对一个很大的堆做一次完整的并发收集。在这段时间里面,由于应用的对象分配速率很高,将创造大量的新对象,这些新对象很难进入当次收集的标记范围,通常就只能全部当作存活对象来看待——尽管其中绝大部分对象都是朝生夕灭的,这就产生了大量的浮动垃圾。如果这种高速分配持续维持的话,每一次完整的并发收集周期都会很长,回收到的内存空间持续小于期间并发产生的浮动垃圾所占的空间,堆中剩余可腾挪的空间就越来越小了。目前唯一的办法就是尽可能地增加堆容量大小,获得更多喘息的时间。2、吞吐量低于G1 GC一般来说,可能会下降5%-15%。对于堆越小,这个效应越明显,堆非常大的时候,比如100G,其他GC可能一次Major或Full GC要几十秒以上,但是对于ZGC不需要那么大暂停。这种细粒度的优化带来的副作用就是,把很多环节其他GC里的STW整体处理,拆碎了,放到了更大时间范围内里去跟业务线程并发执行,甚至会直接让业务线程帮忙做一些GC的操作,从而降低了业务线程的处理能力。总结综上,其实ZGC并不是一个凭空冒出的全新垃圾回收,它结合前几代GC的思想,同时在战术上做了优化以达到极限的STW,ZGC的优秀表现有可能会改变未来程序编写方式,站在垃圾收集器的角度,垃圾收集器特别喜欢不可变对象,原有编程方式鉴于内存、GC能力所限使用可变对象来复用对象而不是销毁重建,试想如果有了ZGC的强大回收能力的加持,是不是我们就可以无脑的使用不可变对象进行代码编写参考:《深入理解java虚拟机》《JAVA性能权威指南》JDK 发展至今的垃圾回收机制 全网最全JDK1~JDK15十一种JVM垃圾收集器的原理总结 为什么CMS需要初始标记? 一步一图带你理清G1垃圾回收流程 美团面试官问我:ZGC 的 Z 是什么意思? ZGC有什么缺点? ZGC 原理是什么,它为什么能做到低延时? 本文档示意图原型:https://www.processon.com/view/link/63771d355653bb3a840c4027发布于 2023-02-06 11:02​赞同 41​​添加评论​分享​收藏​喜欢

ZGC 原理是什么,它为什么能做到低延时? - 知乎

ZGC 原理是什么,它为什么能做到低延时? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册GC垃圾回收(计算机科学)java GCZGCZGC 原理是什么,它为什么能做到低延时?JDK 11将引入实验性的 ZGC,看介绍平均暂停时间低到1ms 左右,那么它是如何做到的?显示全部 ​关注者499被浏览167,864关注问题​写回答​邀请回答​好问题 12​1 条评论​分享​13 个回答按时间排序浣熊say​四川大学 计算机科学技术硕士​ 关注JDK21在用,目前最新的垃圾回收器——ZGC垃圾回收器原理简析欢迎关注,​分享更多原创技术内容~微信公众号:ByteRaccoon、知乎\稀土掘金都叫:浣熊say微信公众号海量Java、数字孪生、工业互联网电子书免费送~ZGC简述什么是ZGC?ZGC(Z Garbage Collector)是Java虚拟机中的一种垃圾回收器,属于低延迟垃圾回收器,它的设计目标就是在保持较低的停顿时间的同时,能够处理非常大的堆内存。目前已经可以将停顿时间降低到10ms左右。ZGC是从JDK 11版本开始引入的,并在后续版本中进行了改进和优化。如上图所示是ZGC垃圾回收器和Parallel和G1等垃圾回收器相比较起来的GC Pause,可以发现其GC 停顿已经降低到的很客观的程度,并且这个GC停顿的时间还是可以自主进行配置的。ZGC的实现没有采用分代收集机制,但是和G1垃圾回收器类似,采用了分区策略,下面是ZGC的一些特性和设计原则:低停顿时间: ZGC的主要设计目标之一是实现低停顿时间,停顿时间(STW)不会超过10ms,这个停顿时间还可以根据实际的项目需求进行配置;处理大内存堆: ZGC被设计为能够处理非常大的堆内存,支持8MB~4TB级别的堆内存,未来会支持16TB;并发收集: ZGC在执行垃圾回收时,会与应用程序线程并发工作,减少了停顿时间,这意味着即使在进行垃圾回收时,应用程序也能够继续执行,降低了对应用性能的影响;可预测的停顿: ZGC追求更加可预测的停顿时间,避免因垃圾回收而引起的不确定性。这对于需要保证应用程序的响应时间和稳定性的场景非常重要;处理不同的内存分配模式: ZGC适应了现代应用程序中常见的内存分配模式,包括大对象、小对象、短期存活对象等,以提高垃圾回收的效率;实时可达性分析: ZGC使用了一种实时的可达性分析算法,以更快地找到不再使用的对象,减少垃圾回收的时间。总体而言,ZGC是为了满足对低延迟和大内存的需求而设计的一种垃圾回收器,适用于对应用程序响应时间要求较高的场景。ZGC启用和相关参数在Java应用程序中启用ZGC,可以使用以下命令行参数:java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -jar YourApplication.jar

这个命令包括两个关键的VM选项:-XX:+UnlockExperimentalVMOptions:解锁实验性的VM选项,允许使用实验性的垃圾回收器。-XX:+UseZGC:启用Z Garbage Collector。ZGC是作为实验性特性引入的,具体取决于您使用的JVM版本,需要确保你的Java版本支持ZGC,另外一些ZGC的常见重要参数如下:参数描述默认值-XX:ZCollectionInterval固定时间间隔进行 GC0-XX:ZAllocationSpikeTolerance内存分配速率预估的一个修正因子2-XX:ZProactive是否启用主动回收策略true-XX:ZUncommit将不再使用的内存还给 OS(JDK13及以上版本)--XX:+UseLargePages -XX:ZPath使用大内存页,配置 Huge Pages 可以提高性能--XX:UseNUMA启用 NUMA 支持true-XX:ZFragmentationLimit根据当前 region 已大于 ZFragmentationLimit,则回收25-XX:ZStatisticsInterval设置打印 ZStat 统计数据的间隔(CPU、内存等日志)-ZGC(Z Garbage Collector)原理ZGC内存布局ZGC(Z Garbage Collector)的内存布局与G1(Garbage-First)在内存布局上有些相似,都采用了基于Region的堆内存布局。ZGC在内存布局方面引入了一些动态性的概念,Region的大小不是固定不变的,也不会区分新生代、老年代区域(实际在JDK21中又引入了新老年代分区的概念,后续我会继续跟踪出一版新的原理),使得它更加灵活和适应不同场景。ZGC的内存布局主要涉及到动态创建、动态销毁以及动态的区域容量大小,以下是ZGC内存布局的一些关键特点:动态创建: ZGC的Region可以根据需要动态创建,系统可以根据应用程序的实际内存需求,动态生成新的内存区域,以适应不同的工作负载。动态销毁: 类似地,ZGC的Region也可以根据垃圾回收的情况动态销毁,当某个区域内的对象被回收后,该区域可以被标记为可用,随后可以被重新分配或销毁,以便更好地管理内存。动态的区域容量大小: ZGC引入了不同大小的Region,包括Small Region(2MB)、Medium Region(32MB)和Large Region(可变大小),使得ZGC在内存分配时能够更好地适应不同大小的对象,提高内存利用率。如上图所示,ZGC的Region分类包括:Small Region(小区域): 大小为2MB,用于存放小于256KB的小对象。这有助于提高小对象的分配和回收效率。 Medium Region(中等区域): 大小为32MB,用于存放大于等于256KB但小于4MB的对象。中等区域的引入有助于处理中等大小的对象。 Large Region(大区域): 大区域的大小是可变的,最小为4MB。每个大区域只用于存放一个大对象,且不会被重新分配,这有助于处理大对象,减少内存碎片化。 这种动态的内存布局设计使得ZGC能够更好地适应不同的工作负载和对象分布模式。它能够在提供低延迟的同时,更加高效地管理内存空间,降低内存碎片化的程度。ZGC的垃圾标记算法——染色指针什么是染色指针?在ZGC出现之前,GC信息被保存在对象头的Mark Word当中,如64位的JVM,对象头的Mark Word中保存的信息如下:64位的MarkWord中保存了GC和对象相关的信息,包括:对象的哈希码、分代年龄、锁记录等。由于这些信息存在于对象头的MarkWord中,而对象实体一般存储在堆内存中,虚拟机栈帧中的局部变量表中存储的则是堆中对象的引用(指针)。因此,当访问对象的时候获取这些信息是很方便的,但是当我们在希望不直接访问对象,仅仅通过对象的指针就得到这些信息的话,这种实现方式就做不到。但是,在追踪式垃圾回收算法的标记阶段,例如:三色标记算法,则可能存在只需要处理指针而无需加载指针所引用的对象的情况。例如在三色标记算法当中,JVM需要给对象打上黑、白、灰色的标记,但是这些标记只与对象的引用有关,与对象本身的其它属性无关。这样的场景下理论上我们只需要为对象的指针打上标记即可,无需在堆内存中为实际的对象打上标记。然而,当前HotSpot虚拟机对标记方案的实现各不相同,采用了包括:对象头标记、BitMap映射和染色指针等不同方法,具体如下:Serial、PS、ParNew、CMS:这些垃圾回收器都是直接将标记信息打在对象头上的,因此写入和读取标记需要时机访问堆中对象。G1、Shenandoah:将标记信息记录在与对象独立的数据结构上,通常是一种BitMap的结构,一般相当于堆内存的1/64大小。ZGC:采用染色指针的方式,直接将标记信息存储在引用对象的指针上,从而实现遍历“引用图”来标记“引用”的效果,而不是遍历对象图来标记对象。总之,理解染色指针首先要理解三色标记算法这个垃圾标记算法,三色标记算法会为对象打上白、灰、黑三种颜色。在ZGC之前的垃圾回收器中,颜色标记都是被打在对象头的MarkWord当中的,这样判断是否是垃圾需要去实际访问堆中对象。而染色指针则可以将颜色标记直接记录在指针上,这样就省去了访问实际对象的过程。这样一来,垃圾标记阶段遍历的不再是对象图来标记垃圾,而是通过遍历“引用图”来标记垃圾,引用的对象便是堆中的对象。染色指针的实现原理染色指针的结构染色指针简单来说就是一种将额外少量的垃圾标记信息(颜色信息)存储在对象指针上的技术,在64 位操作系统中,对象指针的长度也是64位,染色指针的结构图如下: 在染色指针中,高18位都是0暂未使用,剩余的46位实际上是能支持64TB的内存的,但是目前来说计算机内存空间还没这么大。于是剩余的46位中,高4位用来保存了4个标志位,低42位置才是用来保存对象的指针,所以ZGC最大可以管理的内存不超过4TB。染色指针中4个标志位的具体作用如下:Marked 0和Marked 1标志位: 作用: 用于表示对象的三色标记状态,通常用于垃圾收集算法中的标记阶段。意义: 提供了直观的对象垃圾收集状态,通过这两个标志位,JVM可以轻松地追踪对象的标记状态,即未标记、已标记(Marked 0或Marked 1)等。Remapped标志位: 作用: 表示对象是否已经进入了重分配集,即是否需要在内存重分配时进行特殊处理。意义: 对于ZGC垃圾收集算法,该标志位的存在能够提供更高效的内存重分配,避免不必要的复制或移动操作,从而提高垃圾收集的性能。Finalizable标志位: 作用: 标识对象是否需要通过finalize方法进行访问,即是否需要执行清理和释放资源的操作。意义: 允许JVM更灵活地处理对象的生命周期,根据Finalizable标志位的状态来判断是否触发finalize方法,这在一些需要资源释放的情景下尤为重要。通过这四个标志位,JVM可以直接从对象的指针上获取关键的状态信息,而无需访问对象本身的其他属性,这种直接的标志位设计有助于提高垃圾收集的效率和性能。虚拟内存映射但是,上面的染色指针的实现方案中存在着一个问题——如何映射到真实的内存物理地址。因为JVM作为一个普通的进程,这样随意的定义指针中的某几位操作系统是不认可得。实际上Java程序最终都会被转换成机器指令交给具体的平台去执行,CPU可不会认可你Java自己定义的指针结构,只会把整个指针都看作普通的内存地址去映射到物理内存地址。一般的x86-64平台也不支持重新定义机器指令,因此,ZGC就只有采用了虚拟内存映射这个技术来解决这个问题。在x86平台上,CPU使用分页管理机制将线性地址空间和物理地址空间划分为大小相同的块,即"页"(Page)。通过建立映射表,分页管理机制完成线性地址到物理地址的转换。这保证了程序对虚拟内存的访问可以映射到相应的物理内存地址上。可以简单理解为使用mmap将不同的虚拟内存地址映射到同一个物理内存地址上。如上图,ZGC采用虚拟内存映射技术,将同一块物理内存映射为Marked 0、Marked 1和Remapped这三个虚拟内存。每个对象在堆上申请虚拟地址时,ZGC为该对象在这三个视图空间分别分配虚拟地址,这三个虚拟地址映射到同一个物理地址。染色指针中,Marked 0、Marked 1和Remapped作为ZGC的三个视图空间,在同一时间点内只能有一个是有效的。通过切换这三个视图空间,ZGC实现了并发的垃圾回收,对象的标记信息和状态可以在不同的视图之间切换,从而实现垃圾回收的并发性。在后续的ZGC回收流程中我们将详细介绍这三个视图空间的切换流程。指自愈指针(Self-Healing Pointers)自愈指针(Self-Healing Pointers)是指一种用于在并发垃圾回收中进行引用修复的技术。这种技术的目的是在对象移动时,通过修改指针本身而不是对象的引用关系,来维护正确的引用关系,从而避免了对引用对象的访问和修改。在垃圾回收的过程中,如果对象发生移动,原本指向该对象的引用关系就会失效。传统的垃圾回收器需要遍历对象图,修复所有指向移动对象的引用,这会带来一定的性能开销。而自愈指针技术通过直接修改指针来维护引用关系,减少了对对象的访问和修改,提高了并发性能。在自愈指针技术中,指针的高位(通常是一些特定的位或字节)被用来存储额外的信息,例如对象的新地址、标记信息等。当对象移动时,只需要修改指针的高位信息,而不需要访问对象本身,从而实现引用的自愈。这种技术通常应用于并发垃圾回收算法中,其中对象的移动是允许的,并发标记和并发移动阶段需要通过自愈指针来保证引用的正确性。ZGC(Z Garbage Collector)就是一种使用了自愈指针技术的垃圾回收器,它通过虚拟内存映射和染色指针来实现并发垃圾回收,减小了对引用修复的停顿时间。染色指针的优势即时回收空间: 当某个Region中的存活对象被成功移走后,该Region就能够立即释放和重用,而无需等待整个堆中所有指向该Region的引用都被修正。这意味着,理论上只要还有一个空闲的Region,ZGC就能完成垃圾收集。相比之下,Shenandoah需要等到更新阶段结束才能释放回收集中的Region,特别是在Region内的对象都存活时,需要1:1的空间才能完成收集。减少内存屏障使用: 染色指针可以显著减少在垃圾收集过程中内存屏障的使用数量。ZGC仅使用了读屏障,而不需要其他类型的内存屏障。这有助于提高垃圾收集的效率和性能。强大的扩展性: 染色指针具备强大的扩展性,可以作为一种可扩展的存储结构,用于记录与对象标记、重定位过程相关的更多数据。这为将来进一步提高性能提供了可能性,使ZGC能够灵活适应不同的场景和需求。ZGC的垃圾回收原理ZGC触发时机ZGC的触发时机主要取决于堆的占用情况以及对象分配的速率。ZGC是一种响应式的垃圾回收器,会在满足一定触发条件时启动垃圾回收。以下是ZGC触发的主要时机:堆空间占用达到阈值:当堆空间的占用达到一定的阈值时,ZGC可能会被触发。这个阈值可以通过启动JVM时的参数进行配置。一旦堆空间占用超过了指定的阈值,ZGC就有可能被启动。对象分配速率:ZGC会监测对象的分配速率。如果对象分配速率较高,导致堆空间迅速被占满,ZGC可能会被启动以回收内存。这种情况下,ZGC可以防止堆空间迅速耗尽,保持应用程序的正常运行。空闲时间较长:ZGC具有适应性的特性,会根据应用程序的执行情况和空闲时间来判断是否进行垃圾回收。当应用程序处于空闲状态时,ZGC可能会选择启动垃圾回收,以尽量减小对应用程序的干扰。手动触发:开发人员也可以通过Java Management Extensions(JMX)或其他工具手动触发ZGC的垃圾回收。这在一些特殊场景下可能会被使用,例如在某个业务逻辑执行完成后手动触发垃圾回收以及时释放内存。ZGC是为了保持低停顿时间而设计的,因此它可能根据应用程序的需求动态调整触发时机,以最大程度地减小停顿时间。在大多数情况下,ZGC的触发时机是由垃圾收集器自动管理的。ZGC垃圾回收整体流程ZGC(Garbage Collector)是一种在JVM中实现的低停顿时间垃圾回收器。其垃圾回收流程可以概括为以下几个关键阶段:初始标记阶段(Initial Mark):与G1垃圾回收器一样,初始标记阶段是一个短暂的STW阶段,目的是标记出根对象直接引用的对象,标记的过程是并发执行的,所以这个阶段的停顿时间很短。 并发标记阶段(Concurrent Mark):在这个阶段,ZGC并发地标记出所有可达的对象,包括从根对象出发的引用链上的对象,这个过程是与应用程序的执行同时进行的,因此对停顿时间的影响很小。 再标记阶段(Remark):如果在并发标记阶段有新的对象被创建或有对象被回收,ZGC可能需要进行一次短暂的STW再标记。这个阶段的停顿时间一般不超过1毫秒。在这个阶段,ZGC会修正并发标记阶段可能由于并发引起的标记不一致。 并发转移准备(Concurrent Prepare for Relocate):在这个阶段ZGC进行整堆扫描,确定收集哪些Region,并将这些Region组成重分配集(Relocation Set)。与G1收集器不同,ZGC的重分配集扫描所有的Region,而不是计算最有价值回收的Region,由于染色指针的存在,扫描过程会很快。这个过程并不是为了计算最优的回收集,而是为了确定存活对象将被复制到其他Region。此阶段还涉及到JDK12支持的类卸载和弱引用的处理。 初始转移阶段(Initial Relocation):这是ZGC垃圾回收的核心阶段之一,ZGC并发地将重分配集中的存活对象复制到新的Region。为了记录从旧对象到新对象的转移关系,ZGC需要为重分配集中的每个Region维护一个转发表(Forward Table)。 ZGC收集器能仅从引用上就明确得知一个对象是否处于重分配集之中,如果用户线程此时并发访问了位于重分配集中的对象,这次访问将会被预置的内存屏障所截获,然后立即根据Region上的转发表记录将访问转发到新复制的对象上,并同时修正更新该引用的值,使其直接指向新对象,ZGC将这种行为称为指针的“自愈”(Self-Healing)能力 ZGC的染色指针因为“自愈”(Self-Healing)能力,所以只有第一次访问旧对象会变慢,而Shenandoah的Brooks转发指针是每次都会变慢。 一旦重分配集中某个Region的存活对象都复制完毕后,这个Region就可以立即释放用于新对象的分配,但是转发表还得留着不能释放掉,因为可能还有访问在使用这个转发表。 并发转移阶段(Concurrent Relocation):并发转移阶段的工作就是修正堆中指向重分配集中旧对象的所有引用,也可以直接认为就是真正进行对象引用修复的一个步骤,从这一点来看shenandoah的并发引用更新阶段是一样的。但是ZGC并不需要马上完成这个操作(因为有指针自愈的特性),ZGC把并发重映射阶段要做的工作巧妙的合并到下一次垃圾收集循环中的并发标记阶段中去完成,这样做的好处是节省遍历对象图的开销。一旦所有指针修复,新旧对象的引用关系转发表就可以释放了。 以上阶段中,除了初始标记、再标记阶段和初始转移阶段有短暂的STW时间外,其他阶段都是并发执行的,尽量减小了垃圾回收对应用程序的干扰,从而实现低停顿时间。这种并发执行的特性使得ZGC适用于大内存堆的Java应用,尤其是需要低延迟的场景。ZGC垃圾回收并发处理的视图切换单纯从ZGC的整体流程上看,似乎很难看出染色指针在ZGC的垃圾回收流程的作用,实际上ZGC在垃圾标记的过程中会改变染色指针的颜色位,将内存区域切换成ReMapped、M0 或者 M1状态,方便快速判断对象的存活状态。同时,由于扫描指针比较清亮,ZGC每次执行都是进行全堆扫描的。具体视图切换的地方如下图所示:如上图所示,ZGC的垃圾回收周期中涉及的地址视图切换过程可以分为以下几个阶段:初始化阶段:初始时,整个内存空间的地址视图被设置为Remapped,意思是该内存的Region处于重置集当中,无需进行转移或者垃圾清理。程序正常运行和分配对象,并在一定条件下触发垃圾回收。并发标记阶段:第一次进入标记阶段时,视图为M0。如果对象被GC标记线程或应用线程访问过,将对象的地址视图从Remapped调整为M0。标记阶段结束后,对象的地址要么是M0视图,说明对象是活跃的;要么是Remapped视图,说明对象是不活跃的。并发转移阶段:标记结束后,进入转移阶段,此时地址视图再次被设置为Remapped。如果对象被GC转移线程或应用线程访问过,将对象的地址视图从M0调整为Remapped。第二次并发标记阶段:在第二次进入并发标记阶段时,地址视图调整为M1,而非M0。这样设计是为了区别前一次标记和当前标记,确保在不同的标记阶段使用不同的地址视图。在并发标记阶段,采用着色指针和读屏障技术。将对象设置为已标记时,只需设置指针地址的第42~45位,不需要进行一次内存访问,且速度比访问内存更快。这种技术使得传统的将对象存活信息放在对象头中的方式变得不再必要,从而提高了标记的效率。通过这样的设计,ZGC实现了并发的垃圾回收,减少了停顿时间,并通过多次标记阶段和地址视图的切换,有效地管理对象的存活状态。ZGC的优缺点优点描述1. 低停顿ZGC以低停顿为首要目标,几乎所有垃圾回收过程都是并发的,只有短暂的STW。2. 高吞吐量ZGC在吞吐量方面取得了显著进展,超越了G1,接近Parallel Scavenge。3. 内存小没有写屏障和卡表等额外的数据结构,收集过程中额外耗费的内存较小。4. 局部内存分配在多核处理器的某些架构下,优先在当前线程所处的处理器的本地内存上分配对象。5. 并发停顿并发停顿非常短暂,大部分过程都是与应用线程并发执行。6. 无分代没有引入分代的概念,简化了内存管理的复杂性。7. 无内存碎片采用并发的标记-整理算法,没有内存碎片问题。缺点描述1. 浮动垃圾承受的对象分配速率不会太高,产生浮动垃圾,难以及时回收。2. 执行时间较长停顿时间短,但整个垃圾回收过程的执行时间可能较长。3. 无分代概念没有分代概念,可能导致朝生夕死的对象无法及时回收。4. 平台限制目前仅在Linux/x64上可用,可能限制了在其他平台的应用。总结ZGC和G1垃圾回收器一样采用了Region的机制来完成对垃圾的回收和标记,不同的是ZGC将Region分为了small、medium和large,并且单个region可以存放多个对象,但是大对象只会存放在单个large区域当中。对于垃圾的发现算法,ZGC采用了和以前的垃圾回收器都不同的染色指针算法,可以根据对象指针就能够快速的判断对象的存活状态,而无需去对象头中读取相关的信息,垃圾标记效率显著提升。最终,垃圾的标记阶段和CMS、G1垃圾回收器有些类似,都有初始标记、并发标记、最终标记来尽可能多的标记好堆中的垃圾。之后,ZGC独有的并发转移准备、初始转移和并发转移会维护一个Region之间的转发表,来完成垃圾的高效回收。本文只是对ZGC垃圾回收器概念上和基本原理的浅析,关注我,后续带大家从JDK 21源码理解ZGC的核心原理。(PS:我觉得网上的bolg多多少少有些问题,后续打算开个专栏从HotSpot源码解析来真正的出一份正确的JVM核心原理的专栏,这里挖个坑~)发布于 2023-12-25 08:44​赞同 2​​添加评论​分享​收藏​喜欢收起​猿java​ 关注ZGC 保证低延时的核心是:多重视图和染色指针。ZGC 定义ZGC(The Z Garbage Collector),是一种可扩展的低延迟垃圾收集器,主要是用来处理超大内存(TB级别)的垃圾回收。 ZGC 最初是 JDK 11 以一项实验性功能引入的,经过几个版本的迭代,最终在 JDK 15中被宣布为 Production Ready。ZGC的中的"Z"代表什么含义?官方解释如下:img.png大概意思为:Z它不代表任何东西,ZGC只是一个名字。它最初受到 ZFS(文件系统)的启发或致敬,ZFS(文件系统)在首次问世时在许多方面都是革命性的。最初,ZFS 是“Zettabyte File System”的首字母缩写词,但这个意思被废弃了,后来据说它不代表任何东西。这只是一个名字。有关详细信息,请参阅Jeff Bonwick 的博客。下图为 Oracle官方对 ZGC停顿时间的描述:img.pngZGC的目标2018年,Oracle官方描述的 ZGC目标为: 1. 处理 TB 量级的堆; 2. GC 时间不超过 10ms; 3. 相对于使用 G1,应用吞吐量的降低不超过 15%;img.png2022年11月,Oracle官方描述的 ZGC的目标为: 1. 低延时,亚毫秒的最大暂停时间 2. 暂停时间不会随着堆、live-set 或 root-set 的大小而增加 3. 处理 TB 量级的堆(可以处理 8MB-16TB 的堆);img.png通过官方对 ZGC目标的描述也可以看出,在几年的时间内,ZGC垃圾回收器的最大停顿时间已从 10ms 降低到 亚毫秒 级别,性能有了质的飞越。核心技术点2018年,官方描述的 ZGC的核心技术点为: - Concurrent:并发 - Tracing: 可追踪 - Compacting:整理内存 - Single generation: 单代,也就是不进行分代 - Region-based:基于Region - NUMA-aware:支持NUMA,Non-Uniform Memory Access(非一致内存访问) - Load barriers:读屏障 - Colored pointers:染色指针,一种将信息存储在指针中的技术img.png2022年,官方描述的 ZGC的核心技术点为: - Concurrent:并发 - Region-based:基于Region - Compacting:整理内存 - NUMA-aware:支持NUMA,Non-Uniform Memory Access(非一致内存访问) - Using colored pointers:使用染色指针,一种将信息存储在指针中的技术 - Using load barriers:使用读屏障img.png比较 2018年 和 2022年官方对 ZGC核心技术的描述可以发现,官方把 Single generation 这一点去掉了,熟悉 G1的小伙伴应该知道,G1是 Region-based类型,每个 Region在同一时刻只能属于一种分代,但是,一个Region可以在多个分代之间动态切换,因此,ZGC 从 最初的不分代发展成和 G1一样,也有分代。ZGC 原理Region-basedRegion-based:基于区域。ZGC 和 G1等垃圾回收器一样,也会将堆划分成很多的小分区,整个堆内存分区如下图:img.pngZGC的 Region 有小、中、大三种类型: - Small Region(小型 Region):容量固定为 2M, 存放小于 256K的对象; - Medium Region(中型 Region):容量固定为 32M,放置大于等于 256K,并小于 4M的对象; - Large Region(大型 Region): 容量不固定,可以动态变化,但必须为 2M的整数倍,用于放置大于等于 4MB的大对象;CompactingCompacting:整理内存。因为 ZGC回收器和 CMS、G1等垃圾回收器一样,使用了"标记-复制算法",该算法会产生内存碎片,因此需要进行内存整理操作,清除内存碎片。NUMANUMA,Non-Uniform Memory Access(非一致内存访问)。最初的计算机是单核处理器,一个 CPU访问一块内存,但是随着网络的快速发展,单核远不能满足实际需求,因此采用多核处理器技术,多 CPU需要访问同一个内存,因为任一 CPU对同一内存的访问速度是一致的,所以也称作一致内存访问(Uniform Memory Access, UMA),再随着网络的发展,单内存无法满足需求,因此就诞生了多内存,把 CPU和内存集成到同一个单元,这样 CPU就会访问离它最近的内存,提升读写效率,这种方式就是非一致内存访问。NUMA和UMA比较如下图:img.pngNUMA 架构在中大型系统上非常流行,是一种高性能的解决方案,ZGC就充分利用 NUMA架构的特征。Colored pointersColored pointers:染色指针,一种将数据存放在指针里的技术,JVM是通过染色指针来标识某个对象是否需要被GC。 像 CMS,G1这些垃圾收集器的 GC信息都保存在对象头中,而 ZGC的 GC信息保存在指针中,每个对象有一个 64位指针,参考 JDK zGlobals_x86.cpp 源码,ZGC 地址空间和指针结构有如下 3种布局:布局1[0 ~ 41] 共 42-bits,对应 4TB的 Java堆内存;[42-45] 共 4-bits,对应 Metadata Bits,存放 Marked0,Marked1,Remapped,Finalizable 元数据;[46-63] 共 18-bits,全部存放0,预留未使用;img.png抽象成结构图如下:img.png布局2[0 ~ 42] 共 43-bits,对应 8TB的 Java堆内存;[43-46] 共 4-bits,对应 Metadata Bits,存放 Marked0,Marked1,Remapped,Finalizable 元数据;[47-63] 共 17-bits,全部存放0,预留未使用;img.png抽象成结构图如下:img.png布局3[0 ~ 43] 共 44-bits,对应 16TB的 Java堆内存;[44-47] 共 4-bits,对应 Metadata Bits,存放 Marked0,Marked1,Remapped,Finalizable 元数据;[48-63] 共 16-bits,全部存放0,预留未使用;img.png抽象成结构图如下:img.png通过上面的 3种布局,可以发现一个共性:分配 4-bits来分别存放 Marked0,Marked1,Remapped,Finalizable 染色标记位,4种染色标记位说明如下: - Marked0,1-bit,用于标记可到达的对象(活跃对象); - Marked1,1-bit,用于标记可到达的对象(活跃对象); - Remapped,1-bit,指向最新的并指向该对象的当前位置; - Finalizable,1-bit,标识这个对象只能通过finalizer才能访问;多重视图上述 Marked0,Marked1,Remapped染色标记位其实代表一种地址视图,当应用程序创建对象时,首先在堆空间申请一个虚拟地址,ZGC同时会为该对象在 Marked0、Marked1和 Remapped地址空间分别申请一个虚拟地址,三个虚拟地址指向同一个物理地址,并且在同一时间,三个虚拟地址有且只有一个空间有效,整个视图映射关系如下图:img.pngZGC之所以设置三个虚拟地址空间,目的是使用"虚拟空间换时间"的思想,从而降低GC停顿时间。三个空间的切换是由垃圾回收的不同阶段触发的,通过限定三个空间在同一时间点有且仅有一个空间有效高效的完成GC过程的并发操作。Load barriersLoad barriers:读屏障,是指 JIT( just-in-time compilation 即时编译器,JVM)向应用代码注入一小段代码,当从堆中读取对象引用时,就会执行这段代码,官方说明如下:img.png读屏障示例:String n = person.name; // 从堆中读取引用,需要加入屏障

if (n & bad_bit_mask) {

slow_path(register_for(n), address_of(person.name));

}

String p = n ; // 无需屏障,不是从堆中读取引用

n.isEmpty() ; // 无需屏障,不是从堆中读取引用

int age = person.age; // 无需屏障,不是对象引用在读屏障示例中,JVM 注入了如下的一段读屏障代码:if (n & bad_bit_mask) {

slow_path(register_for(n), address_of(person.name));

}对应的字节码如下:mov 0x10(%rax), %rbx // String n = person.name;

test %rbx, 0x20(%r15) // Bad color?

jnz slow_path // Yes -> Enter slow path and

// mark/relocate/remap, adjust

// 0x10(%rax) and %rbx假如 person 对象发生移动,因此 n 和 person.name 的地址都会发生变化,当使用 n 前,需要判断 n 的染色指针是否为 good,如果为 bad color,可以得知 n 的引用地址被修改过,因此需要修正 n 和 person.name的地址,整个过程如下图:img.png上图过程也称为"自愈",即当对象地址发生转移时,通过读屏障操作,不仅赋值的引用更改为最新值,自身引用也被修正了,整个过程看起来像自愈。这里对"转移"做个解释:ZGC是按照 Page内存页进行垃圾回收的,也就是说当对象所在的页面需要回收时,页面里还存活的对象需要被转移到其他页。ConcurrentConcurrent:并发,指 GC线程和应用线程是并发执行。和 MCS、G1等垃圾回收器一样,ZGC也采用了标记-复制算法,不过,ZGC对标记-复制算法做了很大的改进,ZGC垃圾回收周期和视图切换可以抽象成下图:img.png初始化阶段:ZGC初始化之后,整个堆内存空间的地址视图被设置为 Remapped;标记阶段:当进入标记阶段时,视图转变为 Marked0 或者 Marked1;转移阶段:从标记阶段结束进入转移阶段时,视图再次被设置为 Remapped;下图以 obj1,obj2,obj3 三个对象为案例对垃圾回收和视图切换进行了演示:img.pngZGC 全过程ZGC垃圾回收全过程包含:初始标记、并发标记、再标记、并发转移准备、初始转移、并发转移 6个阶段,如下图:img.png在 ZGC 全过程中,会出现 3个 STW(Stop The World):初始标记,再标记,初始转移。尽管这 3个阶段会 STW,但是 ZGC对 STW的暂停时间是有严格要求,一般是 1ms 甚至更低,下面将分别介绍各个阶段:初始标记:这个阶段会 STW,仅标记 GC Root直接可达的对象,压到标记栈中;并发标记,重新定位:这个阶段,GC线程和应用线程是并发执行的,根据初始标记的对象开始并发遍历对象图,还会统计每个 region 的存活对象的数量,具体流程如下图:img.png再标记:这个阶段会 STW,因为并发阶段应用线程还在运行,所以可能会修改对象的引用,导致漏标记的情况,因此,再标记阶段会标记这些漏标的对象,另外,这个阶段还会对系统字典、JVMTI、JFR、字符串表等非强根进行并行标记; - 并发转移准备:为初始转移做一些前置工作; - 初始转移:从GC Root Set集合出发,如果对象在转移的分区集合中,则在新的分区分配对象空间; - 并发转移:这个阶段,GC线程和应用线程是并发执行的,GC线程和应用线程操作对象流程如下图:img.png常见问题为什么需要 Marked0 和 Marked1 两个标识?简单地说是为了区别上一次标记和当前标记,因为每个 GC周期开始时,会交换使用的 Marked标记位,使上次 GC周期中修正的已标记状态失效,所有引用都变成未标记。 比如:GC周期1 使用Marked0,则 GC周期结束后,所有引用 Marked0标记都会成为 01(二进制的01 = 0);GC周期2使用 Marked1,类同于周期1,所有的 Marked标记都会成为 10(二进制的10 = 1)。为什么会有 3种内存布局?这主要还是和 ZGC的目标(支持 8MB-16TB 的堆)相匹配,因为 ZGC需要支持最大 16TB Java堆内存的垃圾回收,所以就需要用不同 bit位数来表示,因此就出现了3种布局。使用多重视图和染色指针的优点像 CMS,G1等垃圾回收器,GC信息是存放在对象头中,因此每次修改对象头信息时都需要先访问内存,然后操作,而 ZGC是把 GC信息存放在指针的有色标记位上,修改GC信息时,无需任何对象访问,只需要设置地址中对应的标志位即可,因此可以加快标记和转移的速度,这也是 ZGC在标记和转移阶段速度更快的原因。Supported PlatformsZGC 支持哪些平台?下面是官方文档列举的所有支持平台:目前,ZGC目前支持了大多数的操作系统,并且是 64位系统。img.pngimg.png重要配置参数启用 ZGC-XX:+UseZGC -Xmx -Xlog:gc

# 或者

-XX:+UseZGC -Xmx -Xlog:gc*ZGC的 JVM选项img.png-Xms -Xmx:堆的最大内存和最小内存;-XX:ReservedCodeCacheSize -XX:InitialCodeCacheSize:设置CodeCache的大小, JIT编译的代码都放在CodeCache中,一般服务64m或128m;-XX:+UnlockExperimentalVMOptions -XX:+UseZGC:启用ZGC的配置;-XX:ConcGCThreads:并发回收垃圾的线程。默认是总核数的12.5%,8核CPU默认是1。调大后GC变快,但会占用程序运行时的CPU资源,吞吐会受到影响;-XX:ParallelGCThreads:STW阶段使用线程数,默认是总核数的60%。 -XX:ZCollectionInterval:ZGC发生的最小时间间隔,单位秒;-XX:ZAllocationSpikeTolerance:ZGC触发自适应算法的修正系数,默认2,数值越大,越早的触发ZGC;-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive:是否启用主动回收,默认开启,这里的配置表示关闭;-Xlog:设置GC日志中的内容、格式、位置以及每个日志的大小;ZGC的发展ZGC 最初是作为 JDK 11 中的一项实验性功能引入的,并在 JDK 15 中被宣布为 Production Ready从 不支持类卸载 到 支持类卸载从仅支持个别系统到支持多个平台从不支持指针压缩,到支持压缩类指针JDK 16 支持并发线程堆栈扫描......ZGC 随着JDK发展的更改日志如下:img.png通过 ZGC的发展可以看出:GC垃圾回收器已经越来越智能化,GC会自适应各种情况自动优化。总结ZGC是一个可扩展的低延迟垃圾收集器,能够处理TB级别堆内存的垃圾回收;ZGC垃圾回收过程几乎全是并发,实际 STW 停顿时间极短;ZGC相对于CMS,G1这些垃圾回收器,最大的技术区别点是染色指针、读屏障、内存多重映射;ZGC 和 Shenandoah、G1一样,采用基于 Region的堆内存分布;对吞吐量优先的场景,ZGC可能并不适合;ZGC将对象存活信息存储在染色指针中,而传统垃圾回收器将对象存活信息放在对象头中;尽管目前大多数互联网公司,主流使用 jdk 8、jdk 11,垃圾回收器使用的是 ParNew + CMS 组合或 G1,但是,作为技术人员还是建议保持对新技术的热情;发布于 2023-02-14 16:17​赞同 34​​1 条评论​分享​收藏​喜欢

分代 ZGC 详解-阿里云开发者社区

分代 ZGC 详解-阿里云开发者社区

产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云售前咨询 95187-1 在线服务售后咨询 4008013260 在线服务其他服务 我要建议 我要投诉更多联系方式备案控制台开发者社区首页探索云世界探索云世界云上快速入门,热门云上应用快速查找了解更多问产品动手实践考认证TIANCHI大赛活动广场活动广场丰富的线上&线下活动,深入探索云世界任务中心做任务,得社区积分和周边高校计划让每位学生受益于普惠算力训练营资深技术专家手把手带教话题畅聊无限,分享你的技术见解开发者评测最真实的开发者用云体验乘风者计划让创作激发创新阿里云MVP遇见技术追梦人直播技术交流,直击现场下载下载海量开发者使用工具、手册,免费下载镜像站极速、全面、稳定、安全的开源镜像技术资料开发手册、白皮书、案例集等实战精华插件为开发者定制的Chrome浏览器插件探索云世界新手上云云上应用构建云上数据管理云上探索人工智能云计算弹性计算无影存储网络倚天云原生容器serverless中间件微服务可观测消息队列数据库关系型数据库NoSQL数据库数据仓库数据管理工具PolarDB开源向量数据库热门Modelscope模型即服务弹性计算云原生数据库物联网云效DevOps龙蜥操作系统平头哥钉钉开放平台大数据大数据计算实时数仓Hologres实时计算FlinkE-MapReduceDataWorksElasticsearch机器学习平台PAI智能搜索推荐人工智能机器学习平台PAI视觉智能开放平台智能语音交互自然语言处理多模态模型pythonsdk通用模型开发与运维云效DevOps钉钉宜搭支持服务镜像站码上公益

开发者社区

开发与运维

文章

正文

分代 ZGC 详解

2023-12-02

211

版权

版权声明:

本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《

阿里云开发者社区用户服务协议》和

《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写

侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

简介:

本文主要介绍JDK21中的分代ZGC详解,包括染色指针、内存屏障等核心概念及ZGC JVM参数介绍ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序。

ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序

分代ZGC收集器具备以下特性:

没有多重映射内存

内存屏障优化

双重缓冲记忆集

无需额外堆内存重分配

堆区域密度

大对象处理

核心概念

染色指针

染色指针是指向堆中对象的指针,该对象与对象的内存地址一起包含对对象的已知状态进行编码的元数据。元数据描述了对象是否已知是活动的、地址是否正确等等。

在分代 ZGC 中,存储在对象字段中的对象引用被实现为染色指针。然而,存储在 JVM 堆栈中的对象引用在硬件堆栈或 CPU 寄存器中实现为无色指针,没有元数据位。读屏障和存储屏障控制染色指针和无色指针之间的转换。

由于染色指针永远不会出现在硬件堆栈或 CPU 寄存器中,因此只要可以有效地完成染色指针和无色指针之间的转换,就可以使用更奇特的染色指针布局

Generational ZGC 使用的染色指针布局将元数据放在指针的低位中,将对象地址放在高位中,这最大限度地减少了负载屏障中的机器指令数量。通过仔细编码内存地址和元数据位,单个移位指令(在 x64上)既可以检查指针是否需要处理,也可以删除元数据位。

GC 阶段标记

非分代 ZGC 判断指针处于哪一个GC阶段很简单,只需要简单的位移:

movq rax, 0x10(rbx)

testq rax, 0x20(r15)

jnz slow_path

testq即等价于&操作,是一般的 bitflag 做法

分代 ZGC 的代码是这样的:

movq rax, 0x10(rbx)

shrq rax, $address_shift

ja slow_path

shrq 是右移操作,同时会设置 Carry Flag 为最后移除的一位,同时如果右移的结果为 0,Zero Flag 也会被设为 0。

ja是 jump if above 指令,仅在CF == 0 && ZF == 0时跳转

该指令的操作过程可以见下图

每次加载均会将地址右移,同时由于 8 字节对齐,JVM 保证了最低三位的值一定为 0,因此若该指针被更新(最后被移除的位值为 1),则会跳入 slow path 分支处理下一个 GC 阶段

最大堆大小

对于64位系统,ZGC支持最大堆大小:JDK11(4TB) -> JDK15(16TB) -> JDK21(16TB+)

不分代 ZGC 对象指针:分代 ZGC 对象指针:

在64位的Linux操作系统中,高18位(或称为高16TB)是由内核保留的,在用户空间是无法直接寻址的。JDK15中使用了其中两位作为标志位

HotSpot虚拟机的标记实现方案

Serial: 标记记录在对象头上

G1/Shenandoah: 标记记录在与对象相互独立的数据结构(BitMap)上

ZGC: 标记信息记在引用对象的指针上

多重映射内存

分代ZGC不再使用多重映射内存

内存多重映射(Multi-Mapping)将多个不同的虚拟内存地址映射到同一个物理内存地址上,是一种多对一映射

内存屏障

由于分代 ZGC 的元数据比较多,使用多重映射内存的方法不再能行得通。因此,在寄存器和栈中的内存地址需要为普通的无色指针。分代 ZGC 不再能通过此减少加载或存储内存屏障的开销,需要在有色和无色指针之间转换,即:

加载屏障: 在加载时移除元数据

存储屏障: 在存储时恢复元数据

用于优化屏障的一些技术是:

快路径和慢路径

最小化加载屏障职责

记忆集屏障

SATB 标记屏障

混合存储屏障检查

存储屏障缓冲区

屏障修补

快路径和慢路径

快路径检测是否需要额外的 GC 工作,当需要时,会跳转进入慢路径,开始相关工作。快路径由 JIT 实现,会直接插入 GC 代码至 JIT 编译后的程序。而慢路径不经常调用,所以使用 C++ 实现

最小化加载屏障职责

分代 ZGC 中,我们需要监控年轻代和老年代,并且在有色指针和无色指针间转换。为了简化加载屏障的复杂性,并引入优化加载屏障的空间,标记的职责交给了加载屏障

在分代 ZGC 中,加载屏障负责:

转换有色指针为无色指针

更新已被 GC 更新的过时指针

存储屏障负责:

转换无色指针为有色指针

维护记忆集

标记对象存活

记忆集和 SATB

记忆集和SATB的概念与G1中一致,详细可见G1 垃圾收集器详解

存储屏障缓冲区

将障碍分为快速路径和慢速路径,并使用指针着色,可以减少对 C++ 慢速路径函数的调用次数。

分代 ZGC 通过在快速路径和慢速路径之间放置 JIT 编译的中间路径来进一步减少开销。中间路径将要覆盖的值和对象字段的地址存储在存储屏障缓冲区中,并返回到已编译的应用程序代码,而不需要采取昂贵的慢速路径。仅当存储屏障缓冲区已满时才采用慢速路径。这可以分摊从编译的应用程序代码转换到 C++ 慢路径代码的一些开销

双重缓冲记忆集

ZGC 的记忆集不使用卡表实现,而是由两个 bitmap 实现。一个 bitmap 用于用户线程,在加载屏障中修改,另一个只读的 bitmap 用于 GC。这样做有两个好处:

用户线程无需等待 bitmap 被清除

因为分了两个 bitmap,所以不需要额外的内存屏障,造成额外的内存开销

无需多余堆空间的重分配

其他 HotSpot GC 中的年轻代回收使用清理模型,GC 一次性找到存活对象并重分配。在 GC 完全了解哪些对象还活着之前,年轻代中的所有对象都必须重分配,在这之后才能回收内存。因此,这些 GC 需要猜测存活对象所需的内存量,并确保在 GC 启动时该内存量可用。如果猜错了,则需要更昂贵的清理操作:例如,就地固定未重分配的对象,这会导致内存碎片,或者 Full GC。

分代 ZGC 有两个阶段:

访问并标记所有可达对象

重分配标记的对象

由于 GC 在重分配之前就知道对象是否存活,因此可以按区域粒度划分工作。一旦存活对象都被重分配出某个区域,即该区域已被清除,该区域就被当作新的目标区域,继续用于重分配或被应用使用。即使没有额外的堆空间,ZGC 仍可通过将压缩对象到当前区域来继续重分配。这使得分代 ZGC 能够重分配并压缩年轻代,而无需使用额外的堆内存

堆区域密度

如果一个区域的存活对象很多,将它们一个个移到老年代堆的操作是不值得的。ZGC 会分析年轻代存活对象的密度,以此为一句来判断是否有机会就地升级为老年代。否则,这个区域会保留为年轻代

大对象处理

ZGC 已经可以很好地处理大型对象。通过将虚拟内存与物理内存解耦,并提前保留虚拟内存,大对象的碎片问题通常可以避免

在分代 ZGC 中,允许在年轻代中分配大对象。鉴于该区域现在可以在不重分配的情况下老化,因此不再需要在老一代中分配大对象。相反,如果大对象寿命较短,则可以在年轻代中收集它们;如果寿命较长,则可以廉价地将它们提升到老年代。

ZGC JVM参数

ZGC 通用参数

参数

描述

默认值

-XX:MinHeapSize, -Xms

最小堆大小

8M

-XX:InitialHeapSize, -Xms

初始化堆大小

128M

-XX:MaxHeapSize, -Xmx

最大堆大小

2036M

-XX:SoftMaxHeapSize

JVM堆的最大软限制

2036M

-XX:ConcGCThreads

并发GC的线程数量

1

-XX:ParallelGCThreads

设置垃圾回收时的并行GC线程数量

4

-XX:UseLargePages

使用大页面内存

false

-XX:UseTransparentHugePages

使用Transparent大页面内存

-XX:UseNUMA

使用UNMA内存分配,可以获得更好的性能

-XX:SoftRefLRUPolicyMSPerMB

每MB的空闲内存空间允许软引用对象存活时间

1000

-XX:AllocateHeapAt

堆分配参数,可以使用非DRAM 内存

ZGC 特有参数

参数

描述

默认值

-XX:ZAllocationSpikeTolerance

修正系数,数值越大,越早触发GC

2.000000

-XX:ZCollectionInterval

ZGC发生的最小时间间隔,单位秒

0.000000

-XX:ZFragmentationLimit

relocation时,当前region碎片化大于此值,则回收region

25.000000

-XX:ZMarkStackSpaceLimit

指定为标记堆栈分配的最大字节数

8096M

-XX:ZProactive

是否启用主动回收

true

-XX:ZUncommit

是否归还不使用的内存给OS

true

-XX:ZUncommitDelay

不再使用的内存最多延迟多久会归还给OS

300s

ZGC 诊断选项

通过-XX:+UnlockDiagnosticVMOptions开启诊断选项

参数

描述

-XX:+UnlockDiagnosticVMOptions

使用诊断模式,下面的参数才会起作用

-XX:ZStatisticsInterval

指定统计数据输出之间的时间间隔(秒)

-XX:ZVerifyForwarding

检验转发表

-XX:ZVerifyMarking

检验标记集

-XX:ZVerifyObjects

检验对象

-XX:ZVerifyRoots

检验根节点

-XX:ZVerifyViews

检验堆视图访问

分代ZGC 特有参数

参数

描述

-XX:ZCollectionIntervalMinor

ZGC进行年轻代垃圾收集(MinorGC)的时间间隔(秒)

-XX:ZCollectionIntervalMajor

ZGC进行老年代垃圾收集(MajorGC)的时间间隔(秒)

-XX:ZYoungCompactionLimit

控制ZGC何时进行年轻代的压缩操作

参考资料:

深入理解Java虚拟机第三版

JEP 439: Generational ZGC

JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production)

理解并应用JVM垃圾收集器-ZGC

分代ZGC

G1 垃圾收集器详解

JDK17+ZGC初体验|得物技术

若明天不见丶

目录

热门文章

最新文章

为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价价格计算器云上成本管理解决方案技术解决方案文档与社区文档开发者社区天池大赛培训与认证权益中心免费试用高校计划企业扶持计划推荐返现计划支持与服务基础服务企业增值服务迁云服务官网公告健康看板信任中心关注阿里云关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务售前咨询:95187-1售后服务:400-80-13260法律声明及隐私权政策Cookies政策廉正举报安全举报联系我们加入我们阿里巴巴集团淘宝网天猫全球速卖通阿里巴巴国际交易市场1688阿里妈妈飞猪阿里云计算AliOS万网高德UC友盟优酷钉钉支付宝达摩院淘宝海外阿里云盘饿了么© 2009-2024 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002 京D3-20220015浙公网安备 33010602009975号浙B2-20080101-4

深入�解 JVM 的�圾收集器:CMS�G1�ZGC | 二哥的Java进阶之路

深入�解 JVM 的�圾收集器:CMS�G1�ZGC | 二哥的Java进阶之路

跳至主�內容二哥的Java进阶之路�客进阶之路知识星�学习路线��资�PDF下载�渣逆袭破解�集B站视频open in new window�索文档K一��言二�Java基础2.1 Java概述��境�置2.2 Java语法基础2.3 数组&字符串2.4 ��对象编程2.5 集�框�(容器)2.6 Java IO2.7 异常处�2.8 常用工具类2.9 Java新特性2.10 网络编程2.11 NIO2.12 Java��知识点2.13 并�编程2.14 JVMJVM�册简介大白�带你认识JVMJVM如何�行Java代�?Java的类加载机制(付费)Java类文件结�javap�字节�栈虚拟机和寄存器虚拟机字节�指令详解深入�解栈帧结�深入�解�行时数�区深入�解�圾�收机制�圾收集器分代收集器CMS分区收集器G1ZGC�结Java创建的对象到底放在哪?深入�解 JITJVM 性能监�之命令行篇JVM 性能监�之�视化篇JVM 性能监�之 Arthas 篇内存泄露�查优化�战CPU 100%�查优化�战JVM 核心知识点总结三�Java进阶四�MySQL五�Redis六�计算机基础七�求��试八�学习建议��知识库�建���系作者深入�解 JVM 的�圾收集器:CMS�G1�ZGC沉默�二Java核心Java虚拟机约 4929 字大约 16 分钟此页内容分代收集器CMS分区收集器G1ZGC�结# 第�一节:�圾收集器�圾�收对� Java 党�说,是一个绕�开的�题,工作中涉�到的调优工作也�常围绕��圾�收器展开。�对��的业务场景,往往需���的�圾收集器�能�� GC 性能,因此,对��大�或者有远大志�的���以�一下�圾收集器。就目��说,JVM 的�圾收集器主�分为两大类:分代收集器和分区收集器,分代收集器的代表是 CMS,分区收集器的代表是 G1 和 ZGC,下�我们�看看这两大类的�圾收集器。# 分代收集器# CMS以��最短�收�顿时间为目标,采用“标记-清除�算法,分 4 大步进行�圾收集,其中�始标记和�新标记会 STW,JDK 1.5 时引入,JDK9 被标记弃用,JDK14 被移除,详情��  JEP 363open in new window。CMS(Concurrent Mark Sweep)�圾收集器是第一个关注 GC �顿时间(STW 的时间)的�圾收集器。之�的�圾收集器,�么是串行的�圾�收方�,�么�关注系统���。CMS �圾收集器之所以能够��对 GC �顿时间的�制,其本质���对「�达性分�算法�的改进,�三色标记算法。在 CMS 出�之�,无论是 Serious �圾收集器,还是 ParNew �圾收集器,以� Parallel Scavenge �圾收集器,它们在进行�圾�收的时候都需� Stop the World,无法���圾�收线程�用户线程的并�执行。标记-清除算法�Stop the World��达性分�算法等知识我们上一节open in new window也讲过了,忘记的��open in new window�以�顾一下。CMS �圾收集器通过三色标记算法,��了�圾�收线程�用户线程的并�执行,�而�大地��了系统�应时间,�高了强交互应用程�的体验。它的�行过程分为 4 个步骤,包括:�始标记并�标记�新标记并�清除�始标记,指的是寻找所有被 GCRoots 引用的对象,该阶段需�「Stop the World�。这个步骤仅仅�是标记一下 GC Roots 能直�关�到的对象,并�需��整个引用的扫�,因此速度很快。并�标记,指的是对「�始标记阶段�标记的对象进行整个引用链的扫�,该阶段�需�「Stop the World�。 对整个引用链�扫�需�花费�常多的时间,因此通过�圾�收线程�用户线程并�执行,�以���圾�收的时间。这也是 CMS 能�大�� GC �顿时间的核心�因,但这也带�了一些问题,�:并�标记的时候,引用�能�生�化,因此�能�生�标(本应该�收的�圾没有被�收)和多标(本�应该�收的�圾被�收)了。�新标记,指的是对「并�标记�阶段出�的问题进行校正,该阶段需�「Stop the World�。正如并�标记阶段说到的,由��圾�收算法和用户线程并�执行,虽然能���应时间,但是会�生�标和多标的问题。所以对� CMS �说,它需�在这个阶段�一些校验,解决并�标记阶段�生的问题。并�清除,指的是将标记为�圾的对象进行清除,该阶段�需�「Stop the World�。 在这个阶段,�圾�收线程�用户线程�以并�执行,因此并�影�用户的�应时间。CMS 的优点是:并�收集���顿。但缺点也很�显:①�对 CPU 资��常�感,因此在 CPU 资�紧张的情况下,CMS 的性能会大打折扣。默认情况下,CMS �用的�圾�收线程数是(CPU数� + 3)/4,当 CPU 数�很大时,�用的�圾�收线程数�比就越�。但如� CPU 数�很�,例如�有 2 个 CPU,�圾�收线程�用就达到了 50%,这�大地��系统的���,无法��。②�CMS 采用的是「标记-清除�算法,会产生大�的内存�片,导致空间��续,当出�大对象无法找到�续的内存空间时,就会触�一次 Full GC,这会导致系统的�顿时间�长。③�CMS 无法处�浮动�圾,当 CMS 在进行�圾�收的时候,应用程�还在�断地产生�圾,这些�圾会在 CMS �圾�收结�之�产生,这些�圾就是浮动�圾,CMS 无法处�这些浮动�圾,�能在下一次 GC 时清��。# 分区收集器# G1G1(Garbage-First Garbage Collector)在 JDK 1.7 时引入,在 JDK 9 时�代 CMS �为了默认的�圾收集器。G1 有五个�性:分代����并行�标记整��STW。①�分代:相信大家还记得我们上一讲中的年轻代和�年代open in new window,G1 也是基�这个�想进行设计的。它将堆内存分为多个大�相等的区域(Region),�个区域都�以是 Eden 区�Survivor 区或者 Old 区。�以通过 -XX:G1HeapRegionSize=n �设置 Region 的大�,�以设定为 1M�2M�4M�8M�16M�32M(�能超过)。G1 有专门分�大对象的 Region � Humongous 区,而�是让大对象直�进入�年代的 Region 中。在 G1 中,大对象的判定规则就是一个大对象超过了一个 Region 大�的 50%,比如�个 Region 是 2M,��一个对象超过了 1M,就会被放入 Humongous 中,而且一个大对象如�太大,�能会横跨多个 Region �存放。G1 会根��个区域的�圾�收情况�决定下一次�圾�收的区域,这样就��了对整个堆内存进行�圾�收,�而��了�圾�收的时间。②���:G1 �以以��方�执行�圾�收,这�味�它�需�一次性�收整个堆空间,而是�以�步���地清�。有助��制�顿时间,尤其是在处�大�堆时。③�并行:G1 �圾�收器�以并行�收�圾,这�味�它�以利用多个 CPU �加速�圾�收的速度,这一特性在年轻代的�圾�收(Minor GC)中特别�显,因为年轻代的�收通常涉�较多的对象和较高的�收速�。④�标记整�:在进行�年代的�圾�收时,G1 使用标记-整�算法。这个过程分为两个阶段:标记存活的对象和整�(�缩)堆空间。通过整�,G1 能够��内存�片化,�高内存利用�。年轻代的�圾�收(Minor GC)使用�制算法,因为年轻代的对象通常是�生夕死的。⑤�STW:G1 也是基�「标记-清除�算法,因此在进行�圾�收的时候,�然需�「Stop the World�。�过,G1 在�顿时间上添加了预测机制,用户�以指定期望�顿时间。G1 中存在三� GC 模�,分别是 Young GC�Mixed GC 和 Full GC。当 Eden 区的内存空间无法支�新对象的内存分�时,G1 会触� Young GC。当需�分�对象到 Humongous 区域或者堆内存的空间�比超过 -XX:G1HeapWastePercent 设置的 InitiatingHeapOccupancyPercent 值时,G1 会触�一次 concurrent marking,它的作用就是计算�年代中有多少空间需�被�收,当���圾的�比达到 -XX:G1HeapWastePercent 中所设置的 G1HeapWastePercent 比例时,在下次 Young GC �会触�一次 Mixed GC。Mixed GC 是指�收年轻代的 Region 以�一部分�年代中的 Region。Mixed GC 和 Young GC 一样,采用的也是�制算法。在 Mixed GC 过程中,如����年代空间还是�足,此时如� G1HeapWastePercent 设定过�,�能引� Full GC。-XX:G1HeapWastePercent 默认是 5,�味��有 5% 的堆是“浪费�的。如�浪费的堆的百分比大� G1HeapWastePercent,则�行 Full GC。在以 Region 为最�管��元以�所采用的 GC 模�的基础上,G1 建立了�顿预测模�,� Pause Prediction Model 。这也是 G1 �常被人所称�的特性。我们�以借助 -XX:MaxGCPauseMillis �设置期望的�顿时间(默认 200ms),G1 会根�这个值�计算出一个��的 Young GC 的�收时间,然�根�这个时间�制定 Young GC 的�收计划。# ZGCZGC(The Z Garbage Collector)是 JDK11 �出的一款�延迟�圾收集器,适用�大内存�延迟�务的内存管�和�收,SPEC jbb 2015 基准测试,在 128G 的大堆下,最大�顿时间� 1.68 ms,�顿时间远胜� G1 和 CMS。ZGC 的设计目标是:在�超过 10ms 的�顿时间下,支� TB 级的内存容�和几�所有的 GC 功能,这也是 ZGC �字的由�,Z 代表� Zettabyte,也就是 1024EB,也就是 1TB 的 1024 �。�过,我需�告诉大家的是,上�这段是我胡编的(😂),JDK 官方并没有�确给出 Z 的定义,就��米汽车 su7,7 也是个魔数,没有�确的定义。总之就是,ZGC 很牛逼,它的目标是:�顿时间�超过 10ms;�顿时间�会��堆的大�,或者活跃对象的大�而�加;支� 8MB~4TB 级别的堆,未�支� 16TB。��讲 G1 �圾收集器的时候�到过,Young GC 和 Mixed GC �采用的是�制算法open in new window,�制算法主�包括以下 3 个阶段:①�标记阶段,� GC Roots 开始,分�对象�达性,标记出活跃对象。②�对象转移阶段,把活跃对象�制到新的内存地�上。③��定�阶段,因为转移导致对象地��生了�化,在�定�阶段,所有指�对象旧地�的引用都�调整到对象新的地�上。标记阶段因为�标记 GC Roots,耗时较短。但转移阶段和�定�阶段需�处�所有存活的对象,耗时较长,并且转移阶段是 STW 的,因此,G1 的性能瓶颈就主��在转移阶段。� G1 和 CMS 类似,ZGC 也采用了�制算法,��过�了�大优化,ZGC 在标记�转移和�定�阶段几�都是并�的,这是 ZGC ���顿时间�� 10ms 的关键所在。ZGC 是�么�到的呢?指针染色(Colored Pointer):一�用�标记对象状�的技术。读�障(Load Barrier):一�在程��行时�入到对象访问�作中的特殊检查,用�确�对象访问的正确性。这两�技术�以让所有线程在并�的�件下就指针的颜色 (状�) 达�一致,而�是对象地�。因此,ZGC �以并�的�制对象,这大大的��了 GC 的�顿时间。# 指针染色在一个指针中,除了存储对象的�际地�外,还有�外的�被用�存储关�该对象的元数�信�。这些信��能包括:对象是�被移动了(�它是�在�收过程中被移动到了新的�置)。对象的存活状�。对象是�被�定或有其他特殊状�。通过在指针中嵌入这些信�,ZGC 在标记和转移阶段会更快,因为通过指针上的颜色就能区分出对象状�,�用�外�内存访问。ZGC仅支�64�系统,它把64�虚拟地�空间划分为多个�空间,如下图所示:其中,0-4TB 对应 Java 堆,4TB-8TB 被称为 M0 地�空间,8TB-12TB 被称为 M1 地�空间,12TB-16TB 预留未使用,16TB-20TB 被称为 Remapped 空间。当创建对象时,首先在堆空间申请一个虚拟地�,该虚拟地�并�会映射到真正的物�地�。�时,ZGC 会在 M0�M1�Remapped 空间中为该对象分别申请一个虚拟地�,且三个虚拟地�都映射到�一个物�地�。下图是虚拟地�的空间划分:�过,三个空间在�一时间�有一个空间有效。ZGC 之所以设置这三个虚拟地�,是因为 ZGC 采用的是“空间�时间�的�想,��� GC 的�顿时间。�上述地�空间划分相对应,ZGC�际仅使用64�地�空间的第0-41�,而第42-45�存储元数�,第47-63�固定为0。由�仅用了第 0~43 �存储对象地�,244 = 16TB,所以 ZGC 最大支� 16TB 的堆。至�对象的存活信�,则存储在42-45�中,这�传统的�圾�收并将对象存活信�放在对象头中完全��。# 读�障当程��试读�一个对象时,读�障会触�以下�作:检查指针染色:读�障首先检查指�对象的指针的颜色信�。处�移动的对象:如�指针表示对象已�被移动(例如,在�圾�收过程中),读�障将确�返�对象的新�置。确�一致性:通过这�方�,ZGC 能够在并�移动对象时��内存访问的一致性,�而�少对应用程��顿的需�。ZGC读�障如何��呢?�看下�这段伪代�,涉� JVM 的底层 C++ 代�:// 伪代�示例,展示读�障的概念性��

Object* read_barrier(Object* ref) {

if (is_forwarded(ref)) {

return get_forwarded_address(ref); // ��对象的新地�

}

return ref; // 对象未移动,返��始引用

}

read_barrier 代表读�障。如�对象已被移动(is_forwarded(ref)),方法返�对象的新地�(get_forwarded_address(ref))。如�对象未被移动,方法返��始的对象引用。读�障�能被GC线程和业务线程触�,并且�会在访问堆内对象时触�,访问的对象��GC Roots时�会触�,这也是扫�GC Roots时需�STW的�因。下�是一个简化的示例代�,展示了读�障的触�时机。Object o = obj.FieldA // �堆中读�引用,需�加入�障

Object p = o // 无需加入�障,因为�是�堆中读�引用

o.dosomething() // 无需加入�障,因为�是�堆中读�引用

int i = obj.FieldB //无需加入�障,因为�是对象引用

# ZGC 的工作过程ZGC 周期由三个 STW 暂�和四个并�阶段组�:标记/�新映射( M/R )�并�引用处�( RP )�并�转移准备( EC ) 和并�转移( RE )。# Stop-The-World 暂�阶段标记开始(Mark Start)STW 暂�:这是 ZGC 的开始,进行 GC Roots 的�始标记。在这个短暂的�顿期间,ZGC 标记所有� GC Root 直��达的对象。�新映射开始(Relocation Start)STW 暂�:在并�阶段之�,这个 STW 暂�是为了准备对象的�定�。在这个阶段,ZGC 选择将�清�的内存区域,并建立必�的数�结�以进行对象移动。暂�结�(Pause End)STW 暂�:ZGC 结�。在这个短暂的�顿中,完�所有�该 GC 周期相关的最终清�工作。# 并�阶段并�标记/�新映射 (M/R) :这个阶段包括并�标记和并��新映射。在并�标记中,ZGC ��对象图,标记所有�达的对象。然�,在并��新映射中,ZGC 更新指�移动对象的所有引用。并�引用处� (RP) :在这个阶段,ZGC 处���引用类�(如软引用�弱引用�虚引用和幽�引用)。这些引用的处�通常需�特殊的考虑,因为它们�对象的�达性和生命周期密切相关。并�转移准备 (EC) :这是为对象转移�准备的阶段。ZGC 确定哪些内存区域将被清�,并准备相关的数�结�。并�转移 (RE) :在这个阶段,ZGC 将存活的对象�旧�置移动到新�置。由�这一过程是并�执行的,因此应用程��以在大多数�圾�收工作进行时继续�行。ZGC 的两个关键技术:指针染色和读�障,�仅应用在并�转移阶段,还应用在并�标记阶段:将对象设置为已标记,传统的�圾�收器需�进行一次内存访问,并将对象存活信�放在对象头中;而在ZGC中,�需�设置指针地�的第42-45���,并且因为是寄存器访问,所以速度比访问内存更快。# �结本篇内容我们主�介�了 CMS�G1 和 ZGC 三��圾收集器,它们都是分区收集器,都是为了�� GC �顿时间而生的,但是它们�有优缺点,我们�以根�业务场景选择�适的�圾收集器。�考资料:1�树哥�编程:CMS �圾收集器open in new window 2�军哥�技术:G1 �圾收集器open in new window 3��团技术专家:G1 GC 的一些关键技术open in new window 4��客时间:为什么 G1 被�� GC 中的�open in new window 5�得物技术:ZGC 关键技术分�open in new window 6��团技术:ZGC 的�索��践open in new window 7�CoderW:ZGC �圾收集器open in new windowGitHub 上标星 10000+ 的开�知识库《二哥的 Java 进阶之路open in new window》第一版 PDF 终��了�包括 Java 基础语法�数组&字符串�OOP�集�框��Java IO�异常处��Java 新特性�网络编程�NIO�并�编程�JVM 等等,共计 32 万余字,500+张手绘图,�以说是通俗易懂��趣幽默……详情戳:太�了,GitHub 上标星 10000+ 的 Java 教程open in new window微信� 沉默�二 或扫�下方二维�关注二哥的�创公众�沉默�二,�� 222 ���费领�。编辑此页open in new window上次编辑�: 贡献者: itwanger,沉默�二上一页深入�解�圾�收机制下一页Java创建的对象到底放在哪?豫ICP备2021038026�-4豫公网安备 41030502000411�Copyright © 2024 沉默�二

Just a moment...

a moment...Enable JavaScript and cookies to conti

中关村在线 - 大中华区专业IT网站 - The valuable and professional IT business website in Greater China

中关村在线 - 大中华区专业IT网站 - The valuable and professional IT business website in Greater China

下载APP

下载APP查看排行榜

排行榜

查报价

攒电脑

投稿

看评测

新闻

视频

直播

图赏

手机

笔记本

游戏硬件

影像

音频

家电

健康个护

企业

办公

汽车

更多频道

手机

游戏手机性能排行智能穿戴

iPhone5G拆解图赏

笔记本

游戏本台式机轻薄本

平板电脑一体电脑智能生活

游戏硬件

CPU

显卡

主板

SSD

机电

游戏

显示器

键鼠

存储

一体机

电竞

芯研所

数码影音

音频 耳机

旅游摄影OLED

激光电视商用显示

HiFi VR

家电

健康家电

电视 冰箱

洗衣机 空调

净化器 净水

厨卫 个护

智能家居生活家电

企业

办公

打印机服务器工作站

企业网络

数字影院

投影

学习机

汽车

极客

新能源 电动车汽车电子

人工智能3D打印智能锁

众测

论坛

问答

下载

装机必备

软件排行

驱动下载

壁纸下载

经销商

全国行情

找产品

全部产品分类

按类别拼音首字母查找:

热门分类

ABCDEFGHIGKLMNOPQSTUVWXYZ0

热门分类

A

更多

手机

HUAWEI Mate 60

评测口碑组图对比

Redmi K70

评测口碑组图对比

苹果iPhone 15 Pro

评测口碑组图对比

OPPO Find X7

评测口碑组图对比

vivo S17

评测口碑组图对比

HUAWEI Mate 60 Pro

评测口碑组图对比

笔记本电脑

联想小新 Pro 16 超能本 2023

评测口碑组图对比

联想小新 14 2023

评测口碑组图对比

惠普暗影精灵9

评测口碑组图对比

HUAWEI MateBook 14s 2023

评测口碑组图对比

苹果MacBook Air 13

评测口碑组图对比

华硕天选4 锐龙版

评测口碑组图对比

显卡

NVIDIA GeForce RTX 4090

评测口碑组图对比

华硕TUF-RTX4060TI-O8G-GAMING

评测口碑组图对比

七彩虹iGame GeForce RTX 4070 Ti Neptune OC

评测口碑组图对比

技嘉RTX 4060 风魔 OC

评测口碑组图对比

蓝宝石Radeon RX 7900 XT 20GB D6 白金版 OC

评测口碑组图对比

影驰Geforce RTX 4070 星曜

评测口碑组图对比

汽车

极氪001 2024款

综述参数组图对比

比亚迪海豚荣耀版

综述参数组图对比

小鹏X9

综述参数组图对比

问界M9

综述参数组图对比

坦克700新能源

综述参数组图对比

小米 SU7

综述参数组图对比

热门品牌

新品首发

本月销量最高

更多

华为智慧屏 V5 85英寸

参数

图片

口碑

¥15928

华为路由 BE 3 Pro

参数

图片

口碑

¥494

华为Mate X5

参数

图片

口碑

¥16999

华为Mate 60 Pro

参数

图片

口碑

¥6999

华为Mate X5 典藏版

参数

图片

口碑

¥16999

苹果iPhone 14

参数

图片

口碑

¥2810

快讯

女神异闻录3将推新DLC王者荣耀女性免费日活动全屋净水一体机很有必要理想将推新SUV车型M6vivo Pad3 Pro配置强

阮经天手表淘宝卖断货咒术回战26卷封面引发争议零号大坝已开放!苹果全新M3笔记本下周开售特斯拉市值跌出美股前十大

马斯克:X将尽快提供支付功能谷歌搜索现微软必应广告苹果限制儿童安装第三方App《蔚蓝法则》手游开发中真我GT Neo6系列参数曝光

2月被投诉钓鱼网站前十名飞机应急舱门掉落事故娃哈哈女职工3月8日放假全球手游吸金榜出炉!米哈游收入超过网易

USB4 AOC评测 “光铜融合”高速超能

索泰RTX 4070 Ti SUPER TRINITY OC月白评测

直降2100元 大疆Mavic 3 Classic旗舰无人机值吗

全能表现的全画幅相机 佳能EOS R6 II选购攻略

上手体验微星VIGOR GK50 ELITE TKL机械键盘

轻量化组合 尼康Z 8与Z 600mm行摄新加坡航展

微星RTX 4070 S魔龙姬评测 定制背板玩法多

prev

next

新闻日历

最新资讯

7日热文

7日热评

7日热帖

菜鸟与吉利远程新能源商用车达成战略合作

16:20

《星空》没有PS5独占 还是等官方消息吧! 很多人在问是不是真的

16:20

全方面升级!猛士917首次OTA升级

16:20

户外神器!长城山海炮X TJM宿营车来了

16:20

学生党买什么AI PC合适?

16:14

浪人崛起 坂本龙马宣传片发布

16:00

派方星舰3T上市,卖24888元,续航400km,外观走朋克路线!

15:57

尼康官宣收购电影摄影机 RED 公司

15:56

神龙汽车第四代 360THP 发动机量产下线,新标致 408 龘龘款首搭

15:55

AMD Ryzen AI CPU和Radeon RX 7000 GPU现支持本地运行LLM和AI聊天机器人

15:55

回南天家里“处处发霉” 收下四个除湿小妙招

15:44

华为明年将推创新 MED 存储产品:机架容量超过 10 PB,功耗低于 2 kW

15:43

1三星Galaxy S24评测:一切都刚刚好全面评测2小米12S、13、14 Ultra配置对比,看看小米这三年升级了些啥技术解析3科技早报:骁龙8 Gen4曝光|Switch 2新消息|苹果砍掉MicroLED项目消息4套装直降2699元 大疆Avata零基础自带桨保飞行体验无人机技术解析52024年现货之后 华为Mate60 Pro+还值得购买吗?技术解析6科技早报:苹果2nm芯片曝光|小米15手机曝光|比亚迪秦销量暴增消息7大疆Pocket 3开箱上手,好用但也有缺点全面评测8小米”陶瓷“营销惹众怒 冲高端要的是技术不是话术技术解析9魅族21 Pro快速上手 是收官之作,也是新时代的起点全面评测10愉快买买买:2024存储涨价不可避免了技术解析11魅族21 Pro对比小米14 Pro 旗舰机没AI真拿不出手技术解析12助力企业高效释放数据价值,希捷银河Exos X24硬盘评测全面评测

1小米汽车SU7配置汇总,四款车型价格突破40万336评论2富士X-SUMMIT 2024 Spring307评论3寰宇万象·TCL QD-Mini LED电视新品发布会277评论4小米推出27寸Mini LED显示器191评论5过年该不该升级Wi-Fi 7路由?看完就知道178评论6红米Note 13 Turbo准备就绪107评论7引领AI终端科技新潮流 魅族21 Pro发布会汇总87评论8小米12S、13、14 Ultra配置对比,看看小米这三年升级了些啥85评论9卢伟冰预热小米14 Ultra 点赞第一评论亮了73评论10三星Galaxy S24评测:一切都刚刚好72评论11华为Mate60或于9月发布 撞车iPhone 16系列68评论128999元!小米14 Ultra钛金属特别版发布66评论

14k高清安防专用监视器,让每一处细节都无处可逃圈子2宋Pro 荣耀版10.98万元起,开启“清场”模式!圈子3电车比油车便宜!比亚迪插混双雄7.98万起,还能可油可电圈子4宋又掀桌子?10.98万元起的宋Pro荣耀直接掀掉屋顶!圈子5降维打击合资燃油,比亚迪汉唐荣耀出击!圈子616.98万起,比亚迪“六边形冠军”的杀手锏圈子7电比油低,比亚迪出“王炸”,7.98万起 插混双雄荣耀出击圈子8出轨的瓜越来越多,不来点实在吃不完,4款最适合吃瓜的光瓶酒推荐圈子9降噪能力强的百元耳机 BarbetSound Buds A69主动降噪耳机圈子10比亚迪亮相2024日内瓦车展 全球化进程再加速圈子11好用不贵 飞时代FWS300R三模蓝牙无线机械键盘圈子12全键热插拔 自主飞飞轴 飞时代FWS300R三模蓝牙无线机械键盘圈子

直播中

2023 vivo开发者大会

APP边看边聊抢红包

今日焦点

本地行情

魅族21 Pro全面评测 AI全面赋能的好手机小米12S、13、14 Ultra对比,看看三年升级了些啥微星i5-12600KF主板套装全新促销!只要2164元技嘉DIY电脑主机仅售5199元 性能强大!官方翻新华为P50 Pro今日开售:售价3488元起!小米RedmiBook 14电脑促销价3399元!刘亦菲巴黎看秀手机被扒!用的还是华为这款老旗舰满减 | 34英寸带鱼屏显示器特价1399元!AOC Q34P2 34英寸显示器吉利发布国民神车 新车仅售5.98万 电比电低主板价格崩盘!昂达H470PRO主板仅售379元宏碁台式整机 2638 元,搭载第12代处理器,性价比超高!

小米14 Ultra上手评测:影像出色,全能大满贯小米”陶瓷“营销惹众怒 冲高端要的是技术不是话术AMD 锐龙R5 5600G搭配微星主板套装1068元iPhone 15 Pro Max价格卖疯了!iPhone 15 Pro手机促销价7399元赠品 | 一加 Ace 3 鸣沙金版 16GB+512GB 仅售2824元!刘亦菲穿白丝小黑裙巴黎看秀:还在用华为Mate X2小米1亿像素高清影像手机917元入手到手价仅917元至龙1060独立显卡到手仅需539元,性能强劲升级版i7电脑主机仅售699元努比亚Z60 Ultra京东自营3899元

欧美新能源市场热度消退、苹果退场,电车还是未来吗手机中的AI是元宇宙一样的噱头,还是真的有用?口袋里的迷你电脑 天虹N100迷你主机仅689元本田发布全新电动车:外观时尚 动力强劲吉利新车上市 5.98万能买吗?李国庆喊话雷军:建议小米汽车20万内 应坚持其一贯的性价比战略东芝20TB硬盘优惠至2984元,超强性能不可错过!满201减100 | 「年度盘点」五大热销手机全面解析:谁才是你的菜?三款实用型立式插座 推荐让你的家居生活更加便捷舒适近7天低价 | 海尔云畅KFR-35GW/81@U1-Ct空调大促!仅售3000!近7天低价 | 智能家居安全必备!Aqara 天然气报警器白菜价99元近7天低价 | 五款热门电源全面解析:非模组化的选择与推荐

爽玩《原神》,这三款性能好机值得推荐小米龙晶陶瓷后盖惹争议 博主测试称“就是微晶玻璃”数码相机榜TOP12 | 佳能微单相机大降价!原价4999元,活动价4899元一加12上架 4181元入手新旗舰突破!香港研究团队开发全球领先芯片:速度提升1000倍vivo X100 Ultra即将发布:搭载2亿像素潜望式长焦镜头、三星E7屏幕满1599减100 | 享受宁静烹饪时光:四款超静音油烟机全面解析AMD锐龙5电脑史低价1792元 限时抢购近3天低价 | 鑫谷阔斧5白色台式电脑机箱到手价99.9抢购!满减 | 华为智选智能台灯2便宜了 华为智选DL-27W Pro智能台灯2更实惠智国者电脑耳机 仅售16.8元!1599元用上旗舰专用潜望长焦,千元机卷错地方了吗

最新视频

更多

03:41

轻量化“拍鸟”神奇 尼克尔Z 600mm f/6.3 VR S 镜头体验

06:26

超大容量超能洗!华帝巨能洗洗碗机全面评测

03:17

iPhone 15信号不是最差的?华为/苹果/小米手机信号实测对比

01:14

理想Mega静态体验 豪华冰箱大彩电

02:33

魅族21 Pro现场体验上手 4999元起售狙击小米

03:08

骁龙 8 Gen4冲击4GHz高频|红米K70补齐存储短板|魅族21 PRO画出5000元句号——科技早报

10:14

【HiFiClub】完蛋!我被耳机包围了!7款主流开放式耳机实测!500-2000元该买谁?

04:35

轻薄高性能笔记本推荐 幻14Air领衔 盘点近期热度极高的几款笔记本 | 百里挑一

10:01

华为Pocket 2上手评测:一款全能的艺术小折叠

02:56

天玑9400跑分破340万!|骁龙8 Gen3降频版将碾压2000元市场|小米14 Ultra获新认证——科技早报

01:23

2024年蓝牙耳机都玩起了AI是种什么体验?

01:12

今年的苹果春季新品都有哪些亮点?

00:40

3D人脸解锁技术,为啥国内现在只剩下华为和荣耀还在坚持?

01:35

快来看看你的iPhone15电池循环次数超过了200吗?

00:51

iPhone15自开售以来,价格一跌再跌,库克到底在布局什么?

新品评测

新品图赏

更多

OMEN暗影精灵10实测《幻兽帕鲁》 满功耗玩游戏就是顶

稳定可靠,比看书还安静的商用电脑你见过么?惠普战99主机评测

【有料评测】索泰RTX 4070 Ti SUPER TRINITY OC月白显卡评测 秀外慧中

上手微星VIGOR GK50 ELITE TKL机械键盘:轻巧好用颜值高

小米14 Ultra上手评测:影像出色,全能大满贯

【有料评测】USB4 AOC评测 “光铜融合”高速超能

魅族21 Pro全面评测 AI全面赋能的好手机

微星RTX 4070 SUPER 12G 魔龙姬显卡评测 定制背板玩法多

超大容量超能洗!华帝巨能洗洗碗机全面评测

【有料评测】将“好用好看好清洁”发挥到极致 华帝集成烹饪中心评测

更多

魅族21 Pro魅族白配色图赏 手感质感双升级

华硕a豆14 Air图赏:轻薄时尚的高性能AI旗舰

小米14 Ultra图赏:外观微变,手感更好

联想ThinkBook 14+ 2024 AI图赏:全能商务

行业首发天光云影工艺 一加 Ace 3 原神刻晴定制机图赏

当传统文化遇上现代科技 闪迪国潮风物版移动固态硬盘赏析

影驰RTX 4070 SUPER星曜OC图赏:高颜值强实力

索泰RTX 4080 S月白:圆润玉华 自成一章

索泰RTX 4070 SUPER欧泊白图赏:颜值性能都能打

星Family首款AI PC 惠普星Book Pro 14 2024图赏

今日好价

大额券 | 实时热销 | 9.9 包邮 | 猜你喜欢

私人定制!三款性价比高、适合家庭使用的组装电脑推荐红米K70全新上市,性价比极高!苹果 MacBook Pro M2 芯片 6869元入手 限时优惠满减|酷冷至尊智瞳M-ATX机箱169元抢购!电脑配置绝配!一加Ace 3手机大促来袭,plus会员专享仅需3225元联想ThinkVision14英寸IPS显示器仅售1499元!超值限时抢购惠普战66 六代 酷睿版 2.5K 120Hz低蓝光商务办公轻薄本仅4599元!荣耀80 5G手机享6期免息优惠 原价1798元到手价1699高性能锂电池电动车仅售1037元,续航50公里!ikbc W200机械键盘限时优惠价 209 元!满减|黑峡谷X3双模机械键盘只要199元!红米新品手机售价仅789元 120Hz刷新率+5000mAh电池飞利浦13英寸墨水屏显示器超值优惠 3599元神舟mini PC7S迷你台式电脑 1088元入手商用办公神器满3000减180|小米13手机暴跌至3200元!抢购一空满3000减180|小米13手机仅售2895元,买二送一!近36天低价|富士 X-T5/XT5微单相机,高画质无所不能中兴天机Axon 11限时95折优惠!仅需800多就能入手高性能5G手机寻找音质与设计的完美平衡?这三款总榜音箱不容错过!一加Ace 2 Pro手机京东百亿补贴活动价仅需2872元近124天低价|iPad mini 6价格崩盘!2981元入手超值好物电动车雨衣 半价26.8 原价36.8 雨天必备华硕灵耀X双屏笔记本电脑 新品上市优惠价格4877元近6天低价|存储无忧!三款超值128GB U盘全面解析与推荐小米儿童智能手表C7A优惠200元仅需275元!性价比超高!C级锁芯智能指纹锁399入手限时优惠显卡榜TOP6|影驰 RTX 4070 显卡超值优惠!仅售4699元近37天低价|小米智能开关59元抢购!智能生活轻松触达索尼WF-1000XM5耳机特价促销中 1499元入手满减|联合创新27英寸 IPS 显示器限时特惠!

手机数码

5G | 安卓| 苹果 | 手机软件 | 极客酷玩 | 智能穿戴 | 数码配件 | 移动电源 | 手机性能天梯图

1599元用上旗舰专用潜望长焦,千元机卷错地方了吗

小米14 Ultra上手评测:影像出色,全能大满贯

欧美新能源市场热度消退、苹果退场,电车会是未来吗?

魅族21 Pro全面评测 AI全面赋能的好手机

魅族21 Pro全面评测 AI全面赋能

MPV年度销量冠军,2024款腾势D9正式上市今年3.8女神节的仪式感是京东文具给的 这些IP联名礼盒美到爆再次定义科技审美,华为Mate60系列斩获2024德国iF设计大奖捕捉生活精彩瞬间 这三款影像旗舰不容错过无需4、5000元也能爽玩《原神》!这三款性能好机值得推荐小米14 Ultra 龙晶陶瓷后盖惹争议 博主实验室测试声称“就是微晶玻璃”iQOO TWS 2正式开售 399元兼顾降噪好音质不看不知道!都支持跨端操作,华为和小米竟如此相似小米”陶瓷“营销惹众怒 冲高端要的是技术不是话术小米12S、13、14 Ultra配置对比,看看小米这三年升级了些啥手机中的AI是元宇宙一样的噱头,还是真的有用?国产影像旗舰手机推荐:OPPO Find X7 Ultra、vivo X100 Pro、小米14 Ultra委员建议出台AI手机生态标准,提升通信行业新质生产力

欧美新能源市场热度消退、苹果退场

轻松翻译沉浸音感 三星Galaxy Buds2 Pro开启互联新时代魅族21 Pro对比小米14 Pro 旗舰机没AI真拿不出手开学焕新季找到你的“高效搭子”,华为MatePad平板助有为青年敢于追梦智能助手 专业影像 三星Galaxy S24系列让旅途更有“AI”Samsung One UI 6.1即将更新 更多Galaxy设备将支持Galaxy AI功能华为Pocket 2艺术定制版:先锋时尚美学与全能体验的完美融合大疆Pocket 3开箱上手,好用但也有缺点2024年现货之后 华为Mate60 Pro+还值得购买吗?荣耀获MWC2024最佳产品大奖 中国企业时隔五年再次夺冠多场景智能适配 三星Galaxy Buds 2 Pro让生活更轻松三星将为更多机型用户提供Galaxy AI体验,加速推进移动AI全球普及华为Pocket 2正式开售场面火爆,外观颜值+全面配置打造全能产品力魅族发布PANDAERx 拯救者灵龙限定Y9000P专业电竞本

小米14 Ultra上手评测:影像出色

iQOO TWS 2上手体验:399元不仅有旗舰级降噪,更有好声音开学季想换台新手机?这三台旗舰陪你度过学习生活魅族21 Pro快速上手 是收官之作,也是新时代的起点三星Galaxy S24评测:一切都刚刚好从生成式AI到5G、Wi-Fi 7连接,看懂高通就看懂了2024科技风向魅族特别活动推出魅族21 PRO 开放式AI终端等新品,全面迈向AI新时代引领AI终端科技新潮流 魅族21 Pro发布会汇总媒体热议iPhone15官旗全系降至历史最低价 京东iPhone15系列4849元起Bose Ultra耳机:Snapdragon Sound加持,aptX无损音频,无缝连接购机享多重礼遇 三星Galaxy Z Fold5助你开启校园新生活全球AI手机首选平台,第三代骁龙8在MWC荣获GTI移动技术创新突破奖“一潭死水”的智能手机 AI会是新解药吗?手机IP联名的变革之作 一加 Ace 3 原神刻晴定制机上手体验

手机热度榜

综合游戏手机拍照手机全面屏高性能

1

HUAWEI Mate 60(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

Redmi K70(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

3

苹果iPhone 15 Pro(128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6799

¥6799

4

OPPO Find X7(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

5

vivo S17(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

6

HUAWEI Mate 60 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

7

vivo X100(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3889

¥3889

8

OPPO Find X7 Ultra(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5799

¥5799

9

小米14(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

10

苹果iPhone 15(128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3810

¥3810

1

Redmi K70(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

2

OPPO Find X7(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

3

vivo S17(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

4

vivo X100(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3889

¥3889

5

OPPO Find X7 Ultra(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5799

¥5799

6

小米14(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

7

小米14 Ultra(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

8

vivo X100 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥4889

¥4889

9

Redmi K70 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3199

¥3199

10

iQOO Neo9(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

1

HUAWEI Mate 60(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

Redmi K70(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

3

苹果iPhone 15 Pro(128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6799

¥6799

4

OPPO Find X7(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

5

vivo S17(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

6

HUAWEI Mate 60 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

7

vivo X100(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3889

¥3889

8

OPPO Find X7 Ultra(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5799

¥5799

9

小米14(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

10

苹果iPhone 15(128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3810

¥3810

1

Moto Razr 40 Ultra 柔和桃限定版(12GB/512GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5199

¥5199

2

HUAWEI Mate 60(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

3

Redmi K70(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

4

苹果iPhone 15 Pro(128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6799

¥6799

5

OPPO Find X7(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

6

vivo S17(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

7

HUAWEI Mate 60 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

8

vivo X100(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3889

¥3889

9

OPPO Find X7 Ultra(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥5799

¥5799

10

小米14(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

1

iQOO 12 Pro(16GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

2

vivo X100 Pro(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥4889

¥4889

3

努比亚红魔8 PRO(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3799

¥3799

4

iQOO Neo8 Pro(16GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2359

¥2359

5

vivo X90(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3298

¥3298

6

ROG 游戏手机6(16GB/512GB/天玑9000+)

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

7

vivo X Fold+(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥6759

¥6759

8

vivo X80(12GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3289

¥3289

9

一加10 Pro(12GB/256GB/5G版)

参数 | 图片 | 点评 | 评测 | 对比

¥4799

¥4799

10

iQOO 8 Pro(12GB/256GB/全网通/5G版)

参数 | 图片 | 点评 | 评测 | 对比

¥3389

¥3389

快速选机高级搜索 >

1999元以下|2000-4599元|4600-7599元

拍照|游戏|快充|送长辈|曲屏|折叠屏

笔记本/企业/办公

平板 | 台式 | 一体机 | 智能生活| 服务器| 网络| 打印机| 投影机| 信息化| 3D打印

卓越性能 AMD商用PC方案馆

比看书还安静的商用电脑你见过么?惠普战99主机评测

网络救星-华为F5G小全光解决方案

柯尼卡美能达bizhub 950i黑白多功能复合机评测

学生党买什么AI PC合适?

OMEN暗影精灵10实测《幻兽帕鲁》 满功耗玩游戏就是顶M3版MacBook Air明日发售 M2版15英寸MacBook Air下架酷比魔方首款高刷平板iPlay 60 Pro即将上市!星动纪元开启sim-to-real新时代国产Rogue《苍翼:混沌效应》好评如潮 暗影精灵10满血极致体验Thinkbook 14 2024在京东抢先首发 更有全网最低价4999元及6期免息福利又搞偷袭!苹果开售M3版本MacBook Air10999元起 ROG幻Air系列专业性能轻薄本二售开抢华硕灵耀14 双屏,双倍活力激发双倍潜能目标1000亿美元!英特尔代工把天赋带给AI时代联想ThinkBook 14+ 2024 AI全能本评测:硬核且全面OMEN暗影精灵10硬核实力,体验大升级帕特·基辛格:一视同仁!把最好服务给到英特尔代工客户

诚意不足 新版MacBook Air被吐槽

苹果也搞突袭?春季新品不开发布会突然上架官网,8999元起售不止一面 共联未来 华硕灵耀14 双屏开启AI PC进阶新世代微星刃影16 2024抢先上线京东 售价7799元起晒单赠微星电竞背包华硕京东超品日来袭!ROG魔霸7Plus电竞本9999元超值入手ThinkBook AI全能本助力新起点,多重福利等你来!生产力提速、创造力提效、安全性提升 英特尔AI PC在商用市场“杀疯了”拥抱AI PC时代,酷睿Ultra带来三大体验进化!上手体验联想小新Pro 16 2024洛图数据:2024年1月激光投影销量同比提升94.3% Vidda等品牌领衔VP+XR虚应用广泛 成为Micro LED产业发展又一引擎《你好!三星堆》 爱普生3LCD投影呈现瑰丽古蜀文明AOC T23Z系列智能会议平板:女性力量闪耀全场 京东女神节特惠 好礼纷呈!TeamBay会议平板科技款:获选中小企业数智化升级推荐方案科技早报:苹果2nm芯片曝光|小米15手机曝光|比亚迪秦销量暴增

高性能游戏本选购指南 这款OMEN暗影精灵10不能错过

千万别忽视 高端旗舰投影机这个参数非常重要!更亮更稳更便捷 全新E系列明基E585智能商务投影评测中国智能投影DLP市场同比增速第一 Vidda投影成“科技年货”选会议平板,性价比不是唯一!关键要看这几点开学换新机 给家里买打印机选这款惠普588准没错8000页+双面打印 这款惠普678直接把配置拉满惊艳网友的龙年主题人体彩绘 竟然是用Vidda投影投出来的!JFrog携手Qwak打造安全的MLOps工作流,加速AI应用程序批量化交付科技早报:骁龙8 Gen4曝光|Switch 2新消息|苹果砍掉MicroLED项目华为在人才峰会上宣布启动2024年多项数字人才培育举措「香港绿色科技论坛2024」为「香港绿色周」揭开序幕企业将因为AI生成的伪造而认为身份认证与验证解决方案无法起到可靠隔离作用Gartner:2024年全球IT支出预计将增长6.8%

笔记本

平板

台式

打印机

服务器

投影

热门商用游戏轻薄

1

联想小新 Pro 16 超能本 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5189

¥5189

2

联想小新 14 2023(i5 1340P/16GB/512GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥3788

¥3788

3

惠普暗影精灵9(i9 13900HX/16GB/1TB/RTX4060/240Hz)

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

4

HUAWEI MateBook 14s 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

5

苹果MacBook Air 13(M1/8GB/256GB/7核)

参数 | 图片 | 点评 | 评测 | 对比

¥6399

¥6399

6

华硕天选4 锐龙版(R7 7735H/16GB/512GB/RTX4060/144Hz/青)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

7

Acer宏碁 掠夺者·擎Neo(i9 13900HX/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

8

机械革命蛟龙16 Pro(R7 7745HX/16GB/1TB/RTX4060/240HZ 2.5K)

参数 | 图片 | 点评 | 评测 | 对比

¥6698

¥6698

9

微软Surface Pro 9(i7 1255U/16GB/512GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥13588

¥13588

10

荣耀MagicBook X 16 Pro 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

1

联想小新 Pro 16 超能本 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5189

¥5189

2

联想小新 14 2023(i5 1340P/16GB/512GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥3788

¥3788

3

HUAWEI MateBook 14s 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

4

荣耀MagicBook X 16 Pro 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

5

联想小新 Pro 14 超能本 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

6

华为MateBook D 16 2024(i5 13420H/16GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

7

华硕无畏Pro 15 2024(Ultra9 185H/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥8989

¥8989

8

联想小新 Pro 16 超能本 2023(i5 13500H/16GB/1TB/RTX3050 6G)

参数 | 图片 | 点评 | 评测 | 对比

¥7989

¥7989

9

华硕灵耀14 2024(Ultra7 155H/32GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥6989

¥6989

10

惠普战66 六代 14 锐龙版(R5 7530U/16GB/1TB/集显/高色域)

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

1

惠普暗影精灵9(i9 13900HX/16GB/1TB/RTX4060/240Hz)

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

2

华硕天选4 锐龙版(R7 7735H/16GB/512GB/RTX4060/144Hz/青)

参数 | 图片 | 点评 | 评测 | 对比

¥6499

¥6499

3

Acer宏碁 掠夺者·擎Neo(i9 13900HX/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

4

联想拯救者R7000 2023 (R7 7735H/16GB/512GB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥8399

¥8399

5

联想拯救者R9000P 2021(R7 5800H/16GB/512GB/RTX3060)

参数 | 图片 | 点评 | 评测 | 对比

¥7288

¥7288

6

联想拯救者 Y9000P 2023(i9 13900HX/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥9489

¥9489

7

联想拯救者 R9000P 2023(R9 7945HX/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥8489

¥8489

8

联想拯救者R7000 2021(R7 5800H/16GB/512GB/RTX3050)

参数 | 图片 | 点评 | 评测 | 对比

¥6388

¥6388

9

机械革命极光Pro(i7 12650H/16GB/512GB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

10

惠普暗影精灵9(i5 13500HX/16GB/512GB/RTX4050/165Hz)

参数 | 图片 | 点评 | 评测 | 对比

¥7199

¥7199

1

联想小新 Pro 16 超能本 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5189

¥5189

2

联想小新 14 2023(i5 1340P/16GB/512GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥3788

¥3788

3

HUAWEI MateBook 14s 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

4

苹果MacBook Air 13(M1/8GB/256GB/7核)

参数 | 图片 | 点评 | 评测 | 对比

¥6399

¥6399

5

荣耀MagicBook X 16 Pro 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

6

联想小新 Pro 14 超能本 2023(i5 13500H/16GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

7

华为MateBook D 16 2024(i5 13420H/16GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

8

华硕无畏Pro 15 2024(Ultra9 185H/16GB/1TB/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥8989

¥8989

9

联想小新 Pro 16 超能本 2023(i5 13500H/16GB/1TB/RTX3050 6G)

参数 | 图片 | 点评 | 评测 | 对比

¥7989

¥7989

10

华硕灵耀14 2024(Ultra7 155H/32GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥6989

¥6989

快速选机高级搜索 >

4000-6999元|7000-9999元|10000元以上

游戏|二合一|轻薄|商务|影音|学生本

热门娱乐2合1商务大屏

1

苹果iPad mini 6(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥2859

¥2859

2

联想小新 Pad Pro 12.7(8GB/128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1559

¥1559

3

苹果iPad Air 5(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥4399

¥4399

4

小米平板6 Pro(8GB/128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2249

¥2249

5

苹果iPad 2022(64GB/WLAN版)

参数 | 图片 | 点评 | 评测 | 对比

¥2949

¥2949

6

华为MatePad 11.5英寸 2023 (8GB/128GB/标准版)

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

7

苹果iPad 2021(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

8

华为MatePad Pro 11 2024( 12GB+256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

9

华为MatePad 11(6GB/128GB/WLAN)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

10

苹果iPad Pro 11英寸 2022(8GB/128GB/WLAN版)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

1

苹果iPad mini 6(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥2859

¥2859

2

联想小新 Pad Pro 12.7(8GB/128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1559

¥1559

3

苹果iPad Air 5(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥4399

¥4399

4

小米平板6 Pro(8GB/128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥2249

¥2249

5

苹果iPad 2022(64GB/WLAN版)

参数 | 图片 | 点评 | 评测 | 对比

¥2949

¥2949

6

华为MatePad 11.5英寸 2023 (8GB/128GB/标准版)

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

7

苹果iPad 2021(64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

8

华为MatePad Pro 11 2024( 12GB+256GB)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

9

华为MatePad 11(6GB/128GB/WLAN)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

10

苹果iPad Pro 11英寸 2022(8GB/128GB/WLAN版)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

1

华为MatePad 11(6GB/128GB/WLAN)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

2

华为平板M6 8.4英寸(4GB/64GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥1799

¥1799

3

华为MatePad Pro 10.8英寸 2021款(8GB/128GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

4

酷比魔方掌玩mini(8GB/256GB)

参数 | 图片 | 点评 | 评测 | 对比

预约抢购

预约抢购

5

华为MatePad(4GB/64GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

6

华为MatePad 11(8GB/128GB/WLAN)

参数 | 图片 | 点评 | 评测 | 对比

¥1449

¥1449

7

华为MatePad (6GB/128GB/WiFi/麒麟820)

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

8

华为MatePad Pro 12.6英寸(8GB/256GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

9

华为MatePad 10.8(6GB/64GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥3068

¥3068

10

HUAWEI MatePad 10.4英寸 2022款 悦动版(6GB/64GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

1

三星Galaxy Tab S9(8GB/128GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥4689

¥4689

2

联想小新 Pad Pro 2021

参数 | 图片 | 点评 | 评测 | 对比

¥2149

¥2149

3

荣耀平板V8(8GB/256GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

4

三星Galaxy Tab S8(128GB/5G版)

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

5

联想小新 Pad Plus

参数 | 图片 | 点评 | 评测 | 对比

¥1499

¥1499

6

三星Galaxy Tab S7(6GB/128GB/WLAN版)

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

7

荣耀平板V8(8GB/128GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

8

华为平板C7(6GB/128GB/WiFi)

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

9

三星Galaxy Tab S7 FE(6GB/128GB/LTE版)

参数 | 图片 | 点评 | 评测 | 对比

¥4249

¥4249

10

三星Galaxy Tab S9 Ultra(12GB/256GB/WiFi版)

参数 | 图片 | 点评 | 评测 | 对比

¥7889

¥7889

1

小米平板7 Pro

参数 | 图片 | 点评 | 评测 | 对比

概念产品

概念产品

2

中柏EZpad Pro8(8GB/128GB)

参数 | 图片 | 点评 | 评测 | 对比

¥1559

¥1559

3

科大讯飞T20 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥8699

¥8699

4

酷比魔方KNote X Pro

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

5

联想TAB 4 10(LTE版)

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

6

小度Z20 Pro智学版

参数 | 图片 | 点评 | 评测 | 对比

¥3294

¥3294

7

联想TAB 4 10 plus(LTE版)

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

8

dere T30 2K触控+WIN11+腾讯教育(8+256固态)

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

9

教多多E13

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

10

酷比魔方KNote GO

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

快速选机高级搜索 >

1499元以下|1500-2999元|3000-4999元

娱乐|2合1|商务|学习|通话|12.1英寸及以上

热门游戏商用家用独显

1

联想拯救者 刃7000K 2024(i5 14600KF/16GB/1TB/ RTX 4060Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥8789

¥8789

2

雷神911黑武士Ⅳ+(i9 12900KS/64GB/2TB+4TB/RTX3090Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥2798

¥2798

3

华硕天选X 2023(i5 13400F/16GB/1TB/RTX3060)

参数 | 图片 | 点评 | 评测 | 对比

¥5699

¥5699

4

戴尔OptiPlex 3060系列 微塔式机(AO3060MT)

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

5

惠普暗影精灵5 TG01-056RCN

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

6

Alienware Aurora R15(i9 13900KF/64GB/2TB+2TB/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥32871

¥32871

7

联想天逸510S 2023(i5 13400/16GB/512GB+1TB/集显/23英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥3989

¥3989

8

联想扬天 M4000q 2022(i3 12100/8GB/512GB/集显/21.45英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥2799

¥2799

9

联想拯救者 刃7000K 2024(i7 14700KF/16GB/1TB/ RTX4070Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥12989

¥12989

10

联想拯救者 刃9000K 2023(i9 13900KF/64GB/2TB/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥32589

¥32589

1

联想拯救者 刃7000K 2024(i5 14600KF/16GB/1TB/ RTX 4060Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥8789

¥8789

2

雷神911黑武士Ⅳ+(i9 12900KS/64GB/2TB+4TB/RTX3090Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥2798

¥2798

3

华硕天选X 2023(i5 13400F/16GB/1TB/RTX3060)

参数 | 图片 | 点评 | 评测 | 对比

¥5699

¥5699

4

惠普暗影精灵5 TG01-056RCN

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

5

Alienware Aurora R15(i9 13900KF/64GB/2TB+2TB/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥32871

¥32871

6

联想拯救者 刃7000K 2024(i7 14700KF/16GB/1TB/ RTX4070Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥12989

¥12989

7

联想拯救者 刃9000K 2023(i9 13900KF/64GB/2TB/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥32589

¥32589

8

联想GeekPro 2023(i5 13400F/16GB/1TB/RTX4060Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥6389

¥6389

9

雷神黑武士5·Shark 酷睿14代 (i9 14900K/96GB/1TSSD/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥36999

¥36999

10

世纪之星XS1900(E5 2673V3/64GB/1TB/RTX 3060/单主机)

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

1

联想天逸510S 2023 (i5 13400/16GB/512GB+1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥3689

¥3689

2

戴尔OptiPlex 3060系列 微塔式机(AO3060MT)

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

3

联想天逸510S 2023(i5 13400/16GB/512GB+1TB/集显/23英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥3989

¥3989

4

联想扬天 M4000q 2022(i3 12100/8GB/512GB/集显/21.45英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥2799

¥2799

5

戴尔成就3710(i3 12100/8GB/1TB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

6

联想开天 M630Z(KX-U6780A/8GB/256GB/1G独显/23.8英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥4500

¥4500

7

华为MateStation B515(R5 4600G/8GB/256GB/集显/23.8LCD)

参数 | 图片 | 点评 | 评测 | 对比

¥5198

¥5198

8

惠普战99 12代酷睿(i3 12100/8GB/512GB/集显 23.8英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

9

联想扬天 T4900K(i5 10400/4GB/500GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥3249

¥3249

10

戴尔成就Vostro 3030S 24年款(i5 14400/16G/512GSSD+1TB/单主机)

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

1

华硕天选X 2022(i5 12400F/16GB/512GB/GTX1660Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

2

戴尔Inspiron 灵越 3670(G5400/4GB/1TB/集显/21.5LCD)

参数 | 图片 | 点评 | 评测 | 对比

¥3199

¥3199

3

华硕天选X 2022(i5 12400F/16GB/512GB/RTX3060 12G)

参数 | 图片 | 点评 | 评测 | 对比

¥5399

¥5399

4

长城(Great Wall) 世恒TD120A2

参数 | 图片 | 点评 | 评测 | 对比

¥6200

¥6200

5

联想开天 M740Z(飞腾D2000/8GB/256GB/2G独显)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

6

Acer 暗影骑士 崭(i7 11700/16GB/512GB/RTX3060)

参数 | 图片 | 点评 | 评测 | 对比

¥9499

¥9499

7

戴尔XPS 8950(i9 12900K/16GB/1TB/RTX3060Ti/白)

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

8

攀升E05(G5905/8GB/256GB/集显)

参数 | 图片 | 点评 | 评测 | 对比

¥1199

¥1199

9

联想拯救者 刃7000P(R5 3600/16GB/512GB/GTX1660Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

10

Alienware Aurora R8(ALWS-D4966S)

参数 | 图片 | 点评 | 评测 | 对比

¥31999

¥31999

1

惠普暗影精灵5 TG01-056RCN

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

雷神黑武士5·Shark 酷睿14代 (i9 14900K/96GB/1TSSD/RTX4090)

参数 | 图片 | 点评 | 评测 | 对比

¥36999

¥36999

3

世纪之星XS1900(E5 2673V3/64GB/1TB/RTX 3060/单主机)

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

4

华硕天选X 2024(i5 14400/16GB/1TB/RTX4060Ti)

参数 | 图片 | 点评 | 评测 | 对比

¥6599

¥6599

5

长城(Great Wall) 世恒TD120A2

参数 | 图片 | 点评 | 评测 | 对比

¥6200

¥6200

6

惠普暗影精灵10 酷睿14代(i5 14400F/16GB/1TB/ RTX3050 8G独显)

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

7

华硕追影(i5 13400F/16G/512G/RTX4060)

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

8

联想启天M530(R5 3600/8GB/1TB/R520/23.8LCD)

参数 | 图片 | 点评 | 评测 | 对比

¥4864

¥4864

9

联想开天 M90h(G1t-D004 HG 3250/8GB/1TB+2TB/RX550/23.8英寸)

参数 | 图片 | 点评 | 评测 | 对比

¥19800

¥19800

10

戴尔OptiPlex 7090MT(i7 11700/16GB/256GB+2TB/WX2100)

参数 | 图片 | 点评 | 评测 | 对比

¥6269

¥6269

快速选机高级搜索 >

3000-5599元|5600-7599元|10000元以上

游戏|家用|商用|创意设计PC

综合喷墨激光一体机

1

HP P1108

参数 | 图片 | 点评 | 评测 | 对比

¥1059

¥1059

2

奔图P2210W

参数 | 图片 | 点评 | 评测 | 对比

¥609

¥609

3

HP CP1025

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

4

兄弟2260D

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

5

佳能LBP2900+

参数 | 图片 | 点评 | 评测 | 对比

¥839

¥839

6

联想LJ2655DN

参数 | 图片 | 点评 | 评测 | 对比

¥1649

¥1649

7

爱普生L1300

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

8

HP 1020plus

参数 | 图片 | 点评 | 评测 | 对比

¥793

¥793

9

HP M403d

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

10

爱普生L805

参数 | 图片 | 点评 | 评测 | 对比

¥2149

¥2149

1

爱普生L3251 标配版

参数 | 图片 | 点评 | 评测 | 对比

¥899

¥899

2

爱普生L3255 标配版

参数 | 图片 | 点评 | 评测 | 对比

¥899

¥899

3

爱普生L1300

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

4

爱普生L805

参数 | 图片 | 点评 | 评测 | 对比

¥2149

¥2149

5

佳能TS3380

参数 | 图片 | 点评 | 评测 | 对比

¥509

¥509

6

HP Deskjet 1210

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

7

爱普生R330

参数 | 图片 | 点评 | 评测 | 对比

¥2179

¥2179

8

佳能iP8780

参数 | 图片 | 点评 | 评测 | 对比

¥2328

¥2328

9

佳能iX6780

参数 | 图片 | 点评 | 评测 | 对比

¥1629

¥1629

10

爱普生L1800

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

1

HP P1108

参数 | 图片 | 点评 | 评测 | 对比

¥1059

¥1059

2

奔图P2210W

参数 | 图片 | 点评 | 评测 | 对比

¥609

¥609

3

HP CP1025

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

4

兄弟2260D

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

5

佳能LBP2900+

参数 | 图片 | 点评 | 评测 | 对比

¥839

¥839

6

联想LJ2655DN

参数 | 图片 | 点评 | 评测 | 对比

¥1649

¥1649

7

HP 1020plus

参数 | 图片 | 点评 | 评测 | 对比

¥793

¥793

8

HP M403d

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

9

HP M254dw

参数 | 图片 | 点评 | 评测 | 对比

¥3099

¥3099

10

HP P1106

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

1

HP Smart Tank 518

参数 | 图片 | 点评 | 评测 | 对比

¥749

¥749

2

兄弟T725DW

参数 | 图片 | 点评 | 评测 | 对比

¥1029

¥1029

3

爱普生L3258

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

4

佳能iC MF643Cdw

参数 | 图片 | 点评 | 评测 | 对比

¥3179

¥3179

5

联想小新熊猫Panda

参数 | 图片 | 点评 | 评测 | 对比

¥996

¥996

6

奔图M7105DN

参数 | 图片 | 点评 | 评测 | 对比

¥4490

¥4490

7

HP M126a

参数 | 图片 | 点评 | 评测 | 对比

¥1369

¥1369

8

HP M227fdw

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

9

联想M7268W

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

10

HP M281fdw

参数 | 图片 | 点评 | 评测 | 对比

¥6219

¥6219

快速选机高级搜索 >

2000-3000元|3000-5000元|10000元以上

激光|喷墨|一体机|大幅面

热门机架式塔式刀片式

1

超聚变FusionServer 2288H V5

参数 | 图片 | 点评 | 评测 | 对比

¥12199

¥12199

2

浪潮英信NF5280M6

参数 | 图片 | 点评 | 评测 | 对比

¥31109

¥31109

3

戴尔易安信PowerEdge R750 机架式服务器(Xeon Gold 6330*2/32GB*2/900GB*2)

参数 | 图片 | 点评 | 评测 | 对比

¥62404

¥62404

4

华为FusionServer RH2288H V3(Xeon E5-2620 v4/16GB/8盘位)

参数 | 图片 | 点评 | 评测 | 对比

¥11987

¥11987

5

H3C UniServer R4900 G3(Xeon Bronze 3204/16GB/600GB)

参数 | 图片 | 点评 | 评测 | 对比

¥17099

¥17099

6

联想SR588 V2 (Xeon Silver4310/32GB/4TB*3 SATA )

参数 | 图片 | 点评 | 评测 | 对比

¥24099

¥24099

7

超聚变FusionServer 2288H V6

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

8

戴尔易安信PowerEdge R750XS机架式服务器(Xeon Gold 5318Y*2/16GB/2TB)

参数 | 图片 | 点评 | 评测 | 对比

¥50100

¥50100

9

浪潮英信NF5280M5(Xeon Silver 4110/16GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥18300

¥18300

10

H3C UniServer R4900 G5

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

1

超聚变FusionServer 2288H V5

参数 | 图片 | 点评 | 评测 | 对比

¥12199

¥12199

2

浪潮英信NF5280M6

参数 | 图片 | 点评 | 评测 | 对比

¥31109

¥31109

3

戴尔易安信PowerEdge R750 机架式服务器(Xeon Gold 6330*2/32GB*2/900GB*2)

参数 | 图片 | 点评 | 评测 | 对比

¥62404

¥62404

4

华为FusionServer RH2288H V3(Xeon E5-2620 v4/16GB/8盘位)

参数 | 图片 | 点评 | 评测 | 对比

¥11987

¥11987

5

H3C UniServer R4900 G3(Xeon Bronze 3204/16GB/600GB)

参数 | 图片 | 点评 | 评测 | 对比

¥17099

¥17099

6

联想SR588 V2 (Xeon Silver4310/32GB/4TB*3 SATA )

参数 | 图片 | 点评 | 评测 | 对比

¥24099

¥24099

7

超聚变FusionServer 2288H V6

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

8

戴尔易安信PowerEdge R750XS机架式服务器(Xeon Gold 5318Y*2/16GB/2TB)

参数 | 图片 | 点评 | 评测 | 对比

¥50100

¥50100

9

浪潮英信NF5280M5(Xeon Silver 4110/16GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥18300

¥18300

10

H3C UniServer R4900 G5

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

1

戴尔易安信PowerEdge T640 塔式服务器(T640-A420836CN)

参数 | 图片 | 点评 | 评测 | 对比

¥17888

¥17888

2

戴尔易安信PowerEdge T40 塔式服务器(T40-AI391008G1TCN_VI_VP)

参数 | 图片 | 点评 | 评测 | 对比

¥9199

¥9199

3

联想TS90X (至强E-2324G/16GB/2*1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥7199

¥7199

4

联想ThinkSystem ST558(7Y16S71E00)

参数 | 图片 | 点评 | 评测 | 对比

¥16288

¥16288

5

ThinkServer TS80X(Xeon E2224G/8GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥5199

¥5199

6

浪潮NP5570M5

参数 | 图片 | 点评 | 评测 | 对比

¥9999

¥9999

7

联想TS90X (至强E-2324G/64G/512GB+2*4TB)

参数 | 图片 | 点评 | 评测 | 对比

¥11000

¥11000

8

ThinKServer T100C(i5 10400/8GB/1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

9

联想TS90X (Intel Xeon6405 /8GB/1TB /250W/单千兆/键鼠 )

参数 | 图片 | 点评 | 评测 | 对比

¥4500

¥4500

10

联想ThinkSystem ST650 V2(Xeon Silver 4310/32GB/480GB+4TB*3/Tesla A100*2)

参数 | 图片 | 点评 | 评测 | 对比

¥192045

¥192045

1

宝德PR2710P

参数 | 图片 | 点评 | 评测 | 对比

¥26900

¥26900

2

浪潮英信NX5840(Xeon E5-2620 v2/8GB/500G)

参数 | 图片 | 点评 | 评测 | 对比

¥90100

¥90100

3

华为FusionServer CH121 V5

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

4

戴尔易安信PowerEdge M640 刀片式服务器

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

5

曙光TC4600E-CX50-G20(Xeon E5-2620v3/8GB/300GB/SAS)

参数 | 图片 | 点评 | 评测 | 对比

¥34600

¥34600

6

浪潮英信 i48-NS5488M5

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

7

华为FusionServer CH121 V3(E5-2620 v4/16GB/GE*4)

参数 | 图片 | 点评 | 评测 | 对比

价格面议

价格面议

8

浪潮英信NX5760M3(Xeon E5-2620V2/8GB/300G)

参数 | 图片 | 点评 | 评测 | 对比

¥51600

¥51600

9

宝德PR2715P

参数 | 图片 | 点评 | 评测 | 对比

¥34100

¥34100

10

浪潮英信NX5440(Xeon E5-2620V2/8GB/300G)

参数 | 图片 | 点评 | 评测 | 对比

¥95000

¥95000

快速选机高级搜索 >

10000-15000元|15000-20000元|50000元以上

机架式|塔式|刀片式|Xeon E7|Xeon E5

热门家用商务工程教育

1

小明Q3Pro

参数 | 图片 | 点评 | 评测 | 对比

¥1596

¥1596

2

极米Z7X

参数 | 图片 | 点评 | 评测 | 对比

¥2669

¥2669

3

当贝D5X

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

4

坚果N1 Air

参数 | 图片 | 点评 | 评测 | 对比

¥2789

¥2789

5

联想小新100S

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

6

极米H3S

参数 | 图片 | 点评 | 评测 | 对比

¥3879

¥3879

7

极米RS Pro 2 晨曦金限定版

参数 | 图片 | 点评 | 评测 | 对比

¥8699

¥8699

8

爱普生CH-TW7000

参数 | 图片 | 点评 | 评测 | 对比

¥9799

¥9799

9

爱普生CB-FH06

参数 | 图片 | 点评 | 评测 | 对比

¥5399

¥5399

10

爱普生CB-FH52

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

1

小明Q3Pro

参数 | 图片 | 点评 | 评测 | 对比

¥1596

¥1596

2

极米Z7X

参数 | 图片 | 点评 | 评测 | 对比

¥2669

¥2669

3

当贝D5X

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

4

坚果N1 Air

参数 | 图片 | 点评 | 评测 | 对比

¥2789

¥2789

5

联想小新100S

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

6

极米H3S

参数 | 图片 | 点评 | 评测 | 对比

¥3879

¥3879

7

极米RS Pro 2 晨曦金限定版

参数 | 图片 | 点评 | 评测 | 对比

¥8699

¥8699

8

坚果G9S

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

9

米家投影仪青春版2

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

10

索尼VPL-XW5000

参数 | 图片 | 点评 | 评测 | 对比

¥35999

¥35999

1

爱普生CH-TW7000

参数 | 图片 | 点评 | 评测 | 对比

¥9799

¥9799

2

爱普生CB-FH06

参数 | 图片 | 点评 | 评测 | 对比

¥5399

¥5399

3

爱普生CB-FH52

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

4

米家投影仪青春版2

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

5

明基MS3081+

参数 | 图片 | 点评 | 评测 | 对比

¥1849

¥1849

6

爱普生CB-X06

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

7

松下PT-BHZ611C

参数 | 图片 | 点评 | 评测 | 对比

¥69800

¥69800

8

爱普生CB-S05

参数 | 图片 | 点评 | 评测 | 对比

¥2939

¥2939

9

爱普生CB-X05

参数 | 图片 | 点评 | 评测 | 对比

¥2894

¥2894

10

爱普生CO-W01

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

1

爱普生CB-L530U

参数 | 图片 | 点评 | 评测 | 对比

¥45000

¥45000

2

爱普生CB-2065

参数 | 图片 | 点评 | 评测 | 对比

¥9498

¥9498

3

爱普生CB-2255U

参数 | 图片 | 点评 | 评测 | 对比

¥13999

¥13999

4

日立HCP-FU50

参数 | 图片 | 点评 | 评测 | 对比

¥20500

¥20500

5

爱普生CB-2265U

参数 | 图片 | 点评 | 评测 | 对比

¥16999

¥16999

6

爱普生CB-2155W

参数 | 图片 | 点评 | 评测 | 对比

¥11798

¥11798

7

松下PT-BAZ712C

参数 | 图片 | 点评 | 评测 | 对比

¥21.8万

¥21.8万

8

爱普生CB-L630U

参数 | 图片 | 点评 | 评测 | 对比

¥64999

¥64999

9

松下PT-BAZ612C

参数 | 图片 | 点评 | 评测 | 对比

¥19.8万

¥19.8万

10

视美乐SML-SF450

参数 | 图片 | 点评 | 评测 | 对比

¥17.58万

¥17.58万

1

爱普生CB-X30

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

2

爱普生EB-C1040XN

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

3

爱普生CB-X29

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

4

爱普生CB-530

参数 | 图片 | 点评 | 评测 | 对比

¥6599

¥6599

5

爱普生CB-580

参数 | 图片 | 点评 | 评测 | 对比

¥8999

¥8999

6

索尼SX236

参数 | 图片 | 点评 | 评测 | 对比

¥7099

¥7099

7

明基ED933

参数 | 图片 | 点评 | 评测 | 对比

¥2199

¥2199

8

明基MS527

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

9

爱普生CB-585W

参数 | 图片 | 点评 | 评测 | 对比

¥11999

¥11999

10

明基MS506

参数 | 图片 | 点评 | 评测 | 对比

¥6699

¥6699

快速选机高级搜索 >

3000元以下|3000-4000元|6000-10000元

家用|商务|微投|工程|教育|影院

影像/音频

摄像机|单反相机|旅游摄影|耳机音箱|HIFI配件

直降2100元 大疆Mavic 3 Classic旗舰无人机值得入手吗

轻量化防空“密集阵” 尼康Z 8与Z 600mm行摄新加坡航展

索尼全新积木音响评测

飞傲台式解码耳放K11评测

加速专业数码电影相机市场的扩张 尼康将收美国电影相机制造商RED.com,LLC

全能表现的全画幅相机 佳能EOS R6 II选购攻略“动”感十足,与佳能EOSR3共舞冰雪“佳”年华尼康与NASA合作开发手持相机 微单相机登上月球套装直降2699元 大疆Avata零基础自带桨保飞行体验无人机充分释放中画幅威力 富士GFX 100II 新加坡航展拍摄体验收入稳步增长 助力持续发展 尼康发布截至2024年3月财年第三季度财报富士XF150-600mm F5.6-8镜头促销佳能超广角RF15-30mm F4.5-6.3镜头售2450元高性价比微单 佳能全能微单EOS R10售7899元佳能全画幅微单相机EOS R8钜惠2000元轻装出发,一“镜”看世界所有的创作者都需要一颗“一镜走天下”CP+2024展会报道:索尼全画幅微单A7CII和A7CR

佳能白色微单相机EOS R50套机6388元

CP+2024展会报道:富士X系列无反相机全员出动CP+2024展会报道:看到科技展示多款全景相机产品CP+2024展会报道:佳能RF超长焦镜头集体亮相CP+2024展会报道:尼康展示众多尼克尔镜头产品CP+2024展会报道:索尼展示旗舰级微单相机Alpha9III月圆人团圆浓情伴元宵 用尼康记录温馨时刻CP+2024展会报道:索尼24-50mm F2.8新品镜头亮相CP+2024展会报道:适马重量级新品镜头与观众见面CP+2024展会报道:尼康复古风格微单Z f、Z fc惊艳登场CP+2024展会报道:尼康次旗舰全能微单Z8 高画质性能强悍CP+2024展会报道:富士复古风相机X100VI拥有强悍性能CP+2024展会报道:富士1亿像素中画幅相机GFX 100II亮相展会CP+2024展会报道:艺卓展示丰富的新品专业显示器

Creative Aurvana Ace系列真无线耳机,精准到每个音符

HiVi惠威M80W 2.1声道桌面蓝牙音箱2599元HiVi惠威Swans D100 2.0声道居家 HI-FI音箱低至899元“听”出健康 华为音频产品为用户带来舒适健康聆听体验2023全球双冠王!沙利文报告:Shokz韶音开放式耳机、运动耳机全球销量第一HiVi惠威M系列 M50WMKIII 2.1声道桌面蓝牙音箱仅需1580元HiVi惠威Series系列D1100多媒体音箱低至609元HiVi惠威M200 2.0声道 家居Hi-Fi蓝牙音箱史低价1099元森海塞尔MOMENTUM真无线4代评测:更智能的体验,更HiFi的音质Bose推出新款Bose Ultra开放式耳机 全新可穿戴设备汇集沉浸式音频体验Bose Ultra Open Earbuds开放式耳机上手快评:引领时尚耳机新风向2024年,AirPods 3代还值得买吗?Beats Studio Buds+三个月体验报告:AirPods Pro的平替之选?三年不改款!苹果初代头戴耳机AirPods Max还能再战几年?

相机

镜头

摄像机

热门微单单反单电卡片全画幅

1

富士X100VI

参数 | 图片 | 点评 | 评测 | 对比

¥11390

¥11390

2

佳能EOS R5

参数 | 图片 | 点评 | 评测 | 对比

¥21098

¥21098

3

索尼A7C II

参数 | 图片 | 点评 | 评测 | 对比

¥13999

¥13999

4

尼康Z8

参数 | 图片 | 点评 | 评测 | 对比

¥25649

¥25649

5

佳能EOS R8

参数 | 图片 | 点评 | 评测 | 对比

¥11099

¥11099

1

佳能EOS R5

参数 | 图片 | 点评 | 评测 | 对比

¥21098

¥21098

2

索尼A7C II

参数 | 图片 | 点评 | 评测 | 对比

¥13999

¥13999

3

尼康Z8

参数 | 图片 | 点评 | 评测 | 对比

¥25649

¥25649

4

佳能EOS R8

参数 | 图片 | 点评 | 评测 | 对比

¥11099

¥11099

5

索尼A7 IV

参数 | 图片 | 点评 | 评测 | 对比

¥16199

¥16199

1

佳能5D Mark IV(单机)

参数 | 图片 | 点评 | 评测 | 对比

¥15399

¥15399

2

佳能EOS 200D II套机(18-55mm)

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

3

佳能EOS 90D

参数 | 图片 | 点评 | 评测 | 对比

¥6899

¥6899

4

佳能5D Mark III(单机)

参数 | 图片 | 点评 | 评测 | 对比

¥8599

¥8599

5

尼康D850(单机)

参数 | 图片 | 点评 | 评测 | 对比

¥17399

¥17399

1

奥林巴斯E-M1 Mark III

参数 | 图片 | 点评 | 评测 | 对比

¥10399

¥10399

2

松下GX9(单机)

参数 | 图片 | 点评 | 评测 | 对比

¥3198

¥3198

3

松下Lumix S1H

参数 | 图片 | 点评 | 评测 | 对比

¥14198

¥14198

4

奥林巴斯E-M1 II(单机)

参数 | 图片 | 点评 | 评测 | 对比

¥6511

¥6511

5

松下GF10套机(12-32mm)

参数 | 图片 | 点评 | 评测 | 对比

¥2597

¥2597

1

索尼ZV-1

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

2

佳能SX740 HS

参数 | 图片 | 点评 | 评测 | 对比

¥4290

¥4290

3

佳能G7 X Mark III

参数 | 图片 | 点评 | 评测 | 对比

¥5799

¥5799

4

索尼ZV-1F

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

5

理光GR III

参数 | 图片 | 点评 | 评测 | 对比

¥12449

¥12449

1

佳能EOS R5

参数 | 图片 | 点评 | 评测 | 对比

¥21098

¥21098

2

索尼A7C II

参数 | 图片 | 点评 | 评测 | 对比

¥13999

¥13999

3

尼康Z8

参数 | 图片 | 点评 | 评测 | 对比

¥25649

¥25649

4

佳能EOS R8

参数 | 图片 | 点评 | 评测 | 对比

¥11099

¥11099

5

索尼A7 IV

参数 | 图片 | 点评 | 评测 | 对比

¥16199

¥16199

热门广角中长焦超广角微距

1

腾龙28-200mm f/2.8-5.6 Di III RXD

参数 | 图片 | 点评 | 评测 | 对比

¥5320

¥5320

2

佳能RF 50mm f/1.8 STM

参数 | 图片 | 点评 | 评测 | 对比

¥1849

¥1849

3

佳能RF 1200mm f/8 L IS USM

参数 | 图片 | 点评 | 评测 | 对比

¥14.3万

¥14.3万

4

佳能RF 70-200mm f/2.8 L IS USM

参数 | 图片 | 点评 | 评测 | 对比

¥17299

¥17299

5

索尼E PZ 16-50mm f/3.5-5.6 OSS(SELP1650)

参数 | 图片 | 点评 | 评测 | 对比

¥649

¥649

1

佳能RF 50mm f/1.8 STM

参数 | 图片 | 点评 | 评测 | 对比

¥1849

¥1849

2

佳能RF 24-105mm f/4-7.1 IS STM

参数 | 图片 | 点评 | 评测 | 对比

¥3588

¥3588

3

索尼FE 35mm f/1.4 GM

参数 | 图片 | 点评 | 评测 | 对比

¥10099

¥10099

4

佳能RF 35mm f/1.8 Macro IS STM

参数 | 图片 | 点评 | 评测 | 对比

¥3379

¥3379

5

索尼FE 35mm F1.8(SEL35F18F)

参数 | 图片 | 点评 | 评测 | 对比

¥4099

¥4099

1

佳能RF 70-200mm f/2.8 L IS USM

参数 | 图片 | 点评 | 评测 | 对比

¥17299

¥17299

2

索尼E PZ 18-105mm f/4.0 G OSS(SELP18105G)

参数 | 图片 | 点评 | 评测 | 对比

¥3057

¥3057

3

适马85mm f/1.4 DG DN Art(索尼E卡口)

参数 | 图片 | 点评 | 评测 | 对比

¥6199

¥6199

4

尼康尼克尔 Z 24-200mm f/4-6.3 VR

参数 | 图片 | 点评 | 评测 | 对比

¥5780

¥5780

5

索尼E 55-210mm f/4.5-6.3 OSS(SEL55210)

参数 | 图片 | 点评 | 评测 | 对比

¥1400

¥1400

1

索尼FE 35mm f/1.4 GM

参数 | 图片 | 点评 | 评测 | 对比

¥10099

¥10099

2

佳能RF 15-35mm f/2.8 L IS USM

参数 | 图片 | 点评 | 评测 | 对比

¥14498

¥14498

3

佳能RF 16mm f/2.8 STM

参数 | 图片 | 点评 | 评测 | 对比

¥1638

¥1638

4

索尼E 15mm f/1.4 G(SEL15F14G)

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

5

索尼FE 16-35mm f/2.8 GM(SEL1635GM)

参数 | 图片 | 点评 | 评测 | 对比

¥14699

¥14699

1

佳能RF 35mm f/1.8 Macro IS STM

参数 | 图片 | 点评 | 评测 | 对比

¥3379

¥3379

2

佳能RF 100mm f/2.8 L MACRO IS USM

参数 | 图片 | 点评 | 评测 | 对比

¥8499

¥8499

3

尼康AF-S VR 微距尼克尔 105mm f/2.8G IF-ED

参数 | 图片 | 点评 | 评测 | 对比

¥8299

¥8299

4

佳能EF 100mm f/2.8L IS USM微距

参数 | 图片 | 点评 | 评测 | 对比

¥7350

¥7350

5

尼康尼克尔 Z 微距 105mm f/2.8 VR S

参数 | 图片 | 点评 | 评测 | 对比

¥6099

¥6099

热门4K运动家用夜摄

1

索尼FDR-AX60

参数 | 图片 | 点评 | 评测 | 对比

¥7299

¥7299

2

索尼FX3

参数 | 图片 | 点评 | 评测 | 对比

¥29989

¥29989

3

佳能PowerShot V10

参数 | 图片 | 点评 | 评测 | 对比

¥1788

¥1788

4

索尼FDR-AX700

参数 | 图片 | 点评 | 评测 | 对比

¥13259

¥13259

5

索尼ILME-FX30

参数 | 图片 | 点评 | 评测 | 对比

¥11678

¥11678

1

索尼FDR-AX60

参数 | 图片 | 点评 | 评测 | 对比

¥7299

¥7299

2

索尼FDR-AX700

参数 | 图片 | 点评 | 评测 | 对比

¥13259

¥13259

3

索尼ILME-FX30

参数 | 图片 | 点评 | 评测 | 对比

¥11678

¥11678

4

松下AG-UX90MC

参数 | 图片 | 点评 | 评测 | 对比

¥12998

¥12998

5

索尼PXW-Z150

参数 | 图片 | 点评 | 评测 | 对比

¥25999

¥25999

1

索尼HDR-AS50

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

2

JVC GZ-R465

参数 | 图片 | 点评 | 评测 | 对比

¥2680

¥2680

3

索尼HDR-AS50实时监控套装

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

4

SJCAM SJ4000

参数 | 图片 | 点评 | 评测 | 对比

¥399

¥399

5

SJCAM C300 128G内存卡 标准版

参数 | 图片 | 点评 | 评测 | 对比

¥789

¥789

1

佳能PowerShot V10

参数 | 图片 | 点评 | 评测 | 对比

¥1788

¥1788

2

索尼HDR-CX405

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

3

索尼FDR-AX100E

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

4

索尼HDR-CX680

参数 | 图片 | 点评 | 评测 | 对比

¥4599

¥4599

5

索尼FDR-AXP55

参数 | 图片 | 点评 | 评测 | 对比

¥9697

¥9697

1

JVC JY-HM95

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

松下AG-DVX200MC

参数 | 图片 | 点评 | 评测 | 对比

¥22499

¥22499

3

松下HC-PV100GK

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

4

佳能XA50

参数 | 图片 | 点评 | 评测 | 对比

¥13200

¥13200

5

佳能XA55

参数 | 图片 | 点评 | 评测 | 对比

¥14679

¥14679

耳机

音箱

热门头戴入耳游戏运动HiFi

1

Apple AirPods Pro 2

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

2

Redmi Buds 5

参数 | 图片 | 点评 | 评测 | 对比

¥179

¥179

3

华为FreeBuds Pro 3

参数 | 图片 | 点评 | 评测 | 对比

¥1349

¥1349

4

漫步者W820NB

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

5

索尼WF-1000XM5

参数 | 图片 | 点评 | 评测 | 对比

¥1449

¥1449

1

漫步者W820NB

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

2

索尼WH-1000XM4

参数 | 图片 | 点评 | 评测 | 对比

¥1779

¥1779

3

苹果AirPods Max

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

4

BOSE QuietComfort 45

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

5

漫步者W820NB 双金标版

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

1

Apple AirPods Pro 2

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

2

Redmi Buds 5

参数 | 图片 | 点评 | 评测 | 对比

¥179

¥179

3

华为FreeBuds Pro 3

参数 | 图片 | 点评 | 评测 | 对比

¥1349

¥1349

4

万利达A81

参数 | 图片 | 点评 | 评测 | 对比

¥139

¥139

5

苹果AirPods 3

参数 | 图片 | 点评 | 评测 | 对比

¥1219

¥1219

1

华为FreeBuds 5i

参数 | 图片 | 点评 | 评测 | 对比

¥369

¥369

2

Redmi Buds 4 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥269

¥269

3

索尼WH-CH520

参数 | 图片 | 点评 | 评测 | 对比

¥369

¥369

4

华为Freebuds 5 至臻版

参数 | 图片 | 点评 | 评测 | 对比

¥799

¥799

5

联想TH10

参数 | 图片 | 点评 | 评测 | 对比

¥79

¥79

1

Apple AirPods Pro 2

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

2

Redmi Buds 5

参数 | 图片 | 点评 | 评测 | 对比

¥179

¥179

3

华为FreeBuds Pro 3

参数 | 图片 | 点评 | 评测 | 对比

¥1349

¥1349

4

万利达A81

参数 | 图片 | 点评 | 评测 | 对比

¥139

¥139

5

苹果AirPods 3

参数 | 图片 | 点评 | 评测 | 对比

¥1219

¥1219

1

森海塞尔HD600

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

2

倍思M2s

参数 | 图片 | 点评 | 评测 | 对比

¥249

¥249

3

vivo TWS 3

参数 | 图片 | 点评 | 评测 | 对比

¥349

¥349

4

vivo TWS 3 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥649

¥649

5

森海塞尔MOMENTUM 4无线耳机

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

热门户外便携HiFiWiFi木质

1

漫步者S2000MKIII

参数 | 图片 | 点评 | 评测 | 对比

¥1680

¥1680

2

漫步者M30

参数 | 图片 | 点评 | 评测 | 对比

¥168

¥168

3

惠威M200MKIII原木豪华版

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

4

JBL Charge5

参数 | 图片 | 点评 | 评测 | 对比

¥805

¥805

5

小度智能屏X9

参数 | 图片 | 点评 | 评测 | 对比

¥594

¥594

1

山水A12-66

参数 | 图片 | 点评 | 评测 | 对比

¥609

¥609

2

JBL FLIP ESSENTIAL

参数 | 图片 | 点评 | 评测 | 对比

¥499

¥499

3

得胜E129

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

4

华为AM10S

参数 | 图片 | 点评 | 评测 | 对比

¥239

¥239

5

华为CM510

参数 | 图片 | 点评 | 评测 | 对比

¥119

¥119

1

漫步者S2000MKIII

参数 | 图片 | 点评 | 评测 | 对比

¥1680

¥1680

2

惠威M200MKIII原木豪华版

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

3

惠威M300MKⅡ

参数 | 图片 | 点评 | 评测 | 对比

¥3980

¥3980

4

惠威M5A

参数 | 图片 | 点评 | 评测 | 对比

¥8100

¥8100

5

惠威D300

参数 | 图片 | 点评 | 评测 | 对比

¥2180

¥2180

1

惠威M5A

参数 | 图片 | 点评 | 评测 | 对比

¥8100

¥8100

2

惠威D300

参数 | 图片 | 点评 | 评测 | 对比

¥2180

¥2180

3

惠威M200MKII+

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

4

BOSE SoundTouch 30 III

参数 | 图片 | 点评 | 评测 | 对比

¥3899

¥3899

5

惠威M500

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

1

漫步者S2000MKIII

参数 | 图片 | 点评 | 评测 | 对比

¥1680

¥1680

2

惠威M200MKIII原木豪华版

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

3

惠威M300MKⅡ

参数 | 图片 | 点评 | 评测 | 对比

¥3980

¥3980

4

惠威M5A

参数 | 图片 | 点评 | 评测 | 对比

¥8100

¥8100

5

惠威D1010MKII

参数 | 图片 | 点评 | 评测 | 对比

¥449

¥449

游戏硬件

CPU|主板|显卡|机箱|电源|SSD|键鼠|显示器|内存

【有料评测】索泰RTX 4070 Ti SUPER TRINITY OC月白显卡评测 秀外慧中

上手微星VIGOR GK50 ELITE TKL机械键盘:轻巧好用颜值高

【有料评测】USB4 AOC评测 “光铜融合”高速超能

微星RTX 4070 SUPER 12G 魔龙姬显卡评测 定制背板玩法多

蚂蚁电竞好价促销 这两款显示器超值

AI绘画能分图层了?超越传统抠图,一经公布收获大量关注《奇唤士》穿越历史的冒险!耕升带你领略1905华沙风情解码AI:揭开AI硬件、软件及其背后工具的神秘面纱英方软件举办春季产品发布会 推出首个大数据平台实时同步产品3月游戏盛宴 RTX4080S冰龙与你带尽享游戏乐趣国货之光再发力 北通获京东小魔方年度新品孵化店铺奖影驰天猫3.8上新季,开工焕新,享超值特惠秒杀《兄弟:双子传说》重制版11年后经典重现!耕升带你重温剧情我拿它来移动办公,偶尔打打游戏,丰富我的碎片时间高分好屏+极致色彩 共同构筑MiniLED游戏显示器新标杆影驰 联盟B760M D5 WI-FI白幽灵主板:中端优选,今日正式开售《驱灵者:新伊甸的幽灵》拯救还是牺牲?耕升助玩家编织命运 攒机单点评:穷比套餐?免费升级4060啊

西部数据天猫3·8焕新周抢先购 存储好物绽放魅力 记录你的美

爆款在前跟风不止,真人互动游戏迸发全民AI游戏时代到来!耕升助SDR游戏HDR化《幻兽帕鲁》很上头?靠谱的固态硬盘给你更迅捷的游戏体验打响开年内卷第一枪 240Hz高刷显示器不到千元CHAT With RTX初体验,本地部署AI的好帮手愉快买买买:2024存储涨价不可避免了引领潮流:新一代雷蛇魔音海妖V3幻彩版和魔音海妖V3迷你版竞自己 战无惧!ROG官宣代言人周冠宇画质提升福音!NVIDIA RTX HDR 一键开启视觉升级旗舰级AI和游戏不二之选!映众RTX 4090 D超级冰龙开箱Steam恐龙大战机器人游戏节来临!耕升助你畅享远古与未来之美开学开工季启动,三星显示器众多爆款产品任你选索泰ZOTAC 服务器旗舰店正式上线,多款热门机型专享特惠

敲黑板!每个电脑玩家都必须掌握的新技巧

忙里偷闲好帮手 Evnia游戏显示器或是一个好选择宫崎英高你干的好啊!《艾尔登法环》DLC发布首个预告片《超自然车旅》驶向神秘深处的冒险之旅!耕升助你畅享驾驶旅途支持DDR5-8000 华硕B760小吹雪S主板首发竞自己 战无惧!ROG官宣代言人周冠宇九州风神推出冰暴一体式水冷散热器开工返校季入手耳机音响认准京东 超级爆品支持至高24期免息NZXT Function 2键盘评测 极简也能堆料影驰RTX 4070 SUPER星曜OC评测:挑战4070Ti的高颜值显卡免费,安全的AI私人助理?Chat with RTX能干啥?雷孜LaCie Rugged Mini SSD:20Gbps+三防精英存储典范卷疯了!继Sora后,Stable Diffusion 3也卷成了蚊香《绝地潜兵2》服务器上限多次扩容!耕升助力异星激战

显卡

主板

CPU

机箱

电源

硬盘

外设

热门主流发烧NVIDIAAMD

1

NVIDIA GeForce RTX 4090

参数 | 图片 | 点评 | 评测 | 对比

¥19999

¥19999

2

华硕TUF-RTX4060TI-O8G-GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

3

七彩虹iGame GeForce RTX 4070 Ti Neptune OC

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

4

技嘉RTX 4060 风魔 OC

参数 | 图片 | 点评 | 评测 | 对比

¥2429

¥2429

5

蓝宝石Radeon RX 7900 XT 20GB D6 白金版 OC

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

6

影驰Geforce RTX 4070 星曜

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

7

盈通RTX 4060Ti 8G 大地之神

参数 | 图片 | 点评 | 评测 | 对比

¥2949

¥2949

8

微星GeForce RTX 4060 VENTUS 2X BLACK 8G OC

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

9

蓝戟Intel Arc A380 Photon 6G OC

参数 | 图片 | 点评 | 评测 | 对比

¥799

¥799

10

摩尔线程MTT S80

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

1

蓝宝石Radeon RX 7900 XT 20GB D6 白金版 OC

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

影驰Geforce RTX 4070 星曜

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

3

摩尔线程MTT S80

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

4

NVIDIA GeForce RTX 3060 12G

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

5

华硕TUF-RTX4070TI-12G-GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥6299

¥6299

6

蓝宝石RX 6750 GRE 12G D6 极地版

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

7

华硕DUAL-RTX4070-12G

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

8

七彩虹iGame GeForce GTX 1650 Ultra 4G

参数 | 图片 | 点评 | 评测 | 对比

¥1199

¥1199

9

撼讯Radeon RX 6750XT 12GBD6-3DHE/OC

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

10

蓝宝石Radeon RX 6750XT 12G D6 超白金OC

参数 | 图片 | 点评 | 评测 | 对比

¥5949

¥5949

1

NVIDIA GeForce RTX 4090

参数 | 图片 | 点评 | 评测 | 对比

¥19999

¥19999

2

七彩虹iGame GeForce RTX 4070 Ti Neptune OC

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

3

影驰GeForce RTX 3060骁将

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

4

NVIDIA GeForce RTX 3090显卡

参数 | 图片 | 点评 | 评测 | 对比

¥5899

¥5899

5

NVIDIA GeForce RTX 3060 Ti显卡

参数 | 图片 | 点评 | 评测 | 对比

¥41899

¥41899

6

七彩虹战斧 GeForce RTX 3060 Ti

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

7

AMD Radeon RX 6700 XT显卡

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

8

七彩虹战斧 GeForce RTX 4070 豪华版

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

9

七彩虹战斧 GeForce RTX 4090 豪华版

参数 | 图片 | 点评 | 评测 | 对比

¥2449

¥2449

10

华硕DUAL-RX6600-8G

参数 | 图片 | 点评 | 评测 | 对比

¥1549

¥1549

1

NVIDIA GeForce RTX 4090

参数 | 图片 | 点评 | 评测 | 对比

¥19999

¥19999

2

华硕TUF-RTX4060TI-O8G-GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

3

七彩虹iGame GeForce RTX 4070 Ti Neptune OC

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

4

技嘉RTX 4060 风魔 OC

参数 | 图片 | 点评 | 评测 | 对比

¥2429

¥2429

5

影驰Geforce RTX 4070 星曜

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

6

盈通RTX 4060Ti 8G 大地之神

参数 | 图片 | 点评 | 评测 | 对比

¥2949

¥2949

7

微星GeForce RTX 4060 VENTUS 2X BLACK 8G OC

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

8

NVIDIA GeForce RTX 3050显卡

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

9

NVIDIA GeForce RTX 3060 12G

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

10

影驰GeForce RTX 3060骁将

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

1

蓝宝石Radeon RX 7900 XT 20GB D6 白金版 OC

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

2

蓝宝石RX 6750 GRE 12G D6 极地版

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

3

AMD Radeon RX 6700 XT显卡

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

4

蓝宝石RX 7800 XT 16G D6 超白金OC

参数 | 图片 | 点评 | 评测 | 对比

¥4449

¥4449

5

撼讯Radeon RX 6750XT 12GBD6-3DHE/OC

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

6

蓝宝石Radeon RX 6750XT 12G D6 超白金OC

参数 | 图片 | 点评 | 评测 | 对比

¥5949

¥5949

7

华硕DUAL-RX6600-8G

参数 | 图片 | 点评 | 评测 | 对比

¥1549

¥1549

8

盈通Radeon RX 6650XT 游戏高手 8G D6

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

9

华硕EX-RX580 2048SP-8G

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

10

技嘉Radeon RX 6600 EAGLE 猎鹰 8G

参数 | 图片 | 点评 | 评测 | 对比

¥1159

¥1159

显卡性能天梯图

TOP1

NVIDIA GeForce RTX 4090

TOP2

蓝宝石 Radeon RX 7900 XTX 24G D6 白金 OC

TOP3

NVIDIA GeForce RTX 4080 16G

热门IntelAMDATXM-ATXMini-ITX

1

华硕B760M-P

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

2

微星PRO H610M-E DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥529

¥529

3

七彩虹CVN B650 GAMING FROZEN V14

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

4

影驰Z790金属大师D5 Wi-Fi白金版

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

5

华硕PRIME H610M-A D4

参数 | 图片 | 点评 | 评测 | 对比

¥699

¥699

6

华硕TUF GAMING B760M-PLUS D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

7

华硕PRIME B660M-K D4

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

8

华硕TUF GAMING B760M-PLUS WIFI D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1149

¥1149

9

微星H610M BOMBER DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥549

¥549

10

微星B450M-A PRO MAX

参数 | 图片 | 点评 | 评测 | 对比

¥389

¥389

1

华硕B760M-P

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

2

微星PRO H610M-E DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥529

¥529

3

影驰Z790金属大师D5 Wi-Fi白金版

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

4

华硕PRIME H610M-A D4

参数 | 图片 | 点评 | 评测 | 对比

¥699

¥699

5

华硕TUF GAMING B760M-PLUS D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

6

华硕PRIME B660M-K D4

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

7

华硕TUF GAMING B760M-PLUS WIFI D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1149

¥1149

8

微星H610M BOMBER DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥549

¥549

9

微星B660M BOMBER DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥799

¥799

10

技嘉H610M H DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥559

¥559

1

七彩虹CVN B650 GAMING FROZEN V14

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

2

微星B450M-A PRO MAX

参数 | 图片 | 点评 | 评测 | 对比

¥389

¥389

3

铭瑄 MS-挑战者B450M

参数 | 图片 | 点评 | 评测 | 对比

¥359

¥359

4

华硕TUF GAMING B650M-PLUS WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

5

华硕PRIME A520M-K

参数 | 图片 | 点评 | 评测 | 对比

¥459

¥459

6

微星B450M MORTAR MAX

参数 | 图片 | 点评 | 评测 | 对比

¥449

¥449

7

微星B450M MORTAR

参数 | 图片 | 点评 | 评测 | 对比

¥799

¥799

8

华硕PRIME B650M-K

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

9

微星B450-A PRO

参数 | 图片 | 点评 | 评测 | 对比

¥689

¥689

10

华硕TUF GAMING B550M-PLUS WIFI II

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

1

七彩虹CVN B650 GAMING FROZEN V14

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

2

影驰Z790金属大师D5 Wi-Fi白金版

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

3

华硕ROG STRIX B760-G GAMING WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥1499

¥1499

4

华硕PRIME B650M-K

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

5

微星B450-A PRO

参数 | 图片 | 点评 | 评测 | 对比

¥689

¥689

6

华硕ROG STRIX Z690-A GAMING WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

7

微星PRO Z690-A WIFI DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥1589

¥1589

8

华硕P8B75-V

参数 | 图片 | 点评 | 评测 | 对比

¥779

¥779

9

华硕PRIME Z370-P

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

10

华硕PRIME B650-PLUS

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

1

华硕B760M-P

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

2

微星PRO H610M-E DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥529

¥529

3

华硕PRIME H610M-A D4

参数 | 图片 | 点评 | 评测 | 对比

¥699

¥699

4

华硕TUF GAMING B760M-PLUS D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

5

华硕PRIME B660M-K D4

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

6

华硕TUF GAMING B760M-PLUS WIFI D4重炮手

参数 | 图片 | 点评 | 评测 | 对比

¥1149

¥1149

7

微星H610M BOMBER DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥549

¥549

8

微星B450M-A PRO MAX

参数 | 图片 | 点评 | 评测 | 对比

¥389

¥389

9

微星B660M BOMBER DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥799

¥799

10

技嘉H610M H DDR4

参数 | 图片 | 点评 | 评测 | 对比

¥559

¥559

1

华硕ROG STRIX B760-I GAMING WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥1749

¥1749

2

华硕ROG STRIX B650E-I GAMING WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

3

华擎B365M-ITX/ac

参数 | 图片 | 点评 | 评测 | 对比

¥749

¥749

4

技嘉A520I AC

参数 | 图片 | 点评 | 评测 | 对比

¥729

¥729

5

华硕ROG STRIX Z390-I GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥1799

¥1799

6

华硕ROG STRIX B660-I GAMING WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

7

华硕ROG STRIX B450-I GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

8

精粤H97I GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥268

¥268

9

技嘉B450 I AORUS PRO WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

10

微星B450I GAMING PLUS MAX WIFI

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

快速选机高级搜索 >

599元以下|1000-1999元|2000-2999元

Intel|AMD|ATX|M-ATX|Mini-ITX

热门IntelAMD

1

Intel 酷睿 i5 13600KF

参数 | 图片 | 点评 | 评测 | 对比

¥2049

¥2049

2

Intel 酷睿 i9 14900K

参数 | 图片 | 点评 | 评测 | 对比

¥4399

¥4399

3

Intel 酷睿 i5 12400F

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

4

Intel 酷睿 i5 14600K

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

5

AMD Ryzen 5 7500F

参数 | 图片 | 点评 | 评测 | 对比

¥1079

¥1079

6

AMD Ryzen 5 5600G

参数 | 图片 | 点评 | 评测 | 对比

¥809

¥809

7

AMD Ryzen 5 5600

参数 | 图片 | 点评 | 评测 | 对比

¥709

¥709

8

Intel 酷睿 i5 13490F

参数 | 图片 | 点评 | 评测 | 对比

¥1449

¥1449

9

Intel 酷睿 i7 14700K

参数 | 图片 | 点评 | 评测 | 对比

¥3199

¥3199

10

Intel 酷睿 i5 12600KF

参数 | 图片 | 点评 | 评测 | 对比

¥1116

¥1116

1

Intel 酷睿 i5 13600KF

参数 | 图片 | 点评 | 评测 | 对比

¥2049

¥2049

2

Intel 酷睿 i9 14900K

参数 | 图片 | 点评 | 评测 | 对比

¥4399

¥4399

3

Intel 酷睿 i5 12400F

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

4

Intel 酷睿 i5 14600K

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

5

Intel 酷睿 i5 13490F

参数 | 图片 | 点评 | 评测 | 对比

¥1449

¥1449

6

Intel 酷睿 i7 14700K

参数 | 图片 | 点评 | 评测 | 对比

¥3199

¥3199

7

Intel 酷睿 i5 12600KF

参数 | 图片 | 点评 | 评测 | 对比

¥1116

¥1116

8

Intel 酷睿i7 7700

参数 | 图片 | 点评 | 评测 | 对比

¥3189

¥3189

9

Intel 酷睿 i7 14700KF

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

10

Intel 酷睿 i5 13400F

参数 | 图片 | 点评 | 评测 | 对比

¥1449

¥1449

1

AMD Ryzen 5 7500F

参数 | 图片 | 点评 | 评测 | 对比

¥1079

¥1079

2

AMD Ryzen 5 5600G

参数 | 图片 | 点评 | 评测 | 对比

¥809

¥809

3

AMD Ryzen 5 5600

参数 | 图片 | 点评 | 评测 | 对比

¥709

¥709

4

AMD Ryzen 7 7800X3D

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

5

AMD Ryzen 9 7950X3D

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

6

AMD Ryzen 5 3600

参数 | 图片 | 点评 | 评测 | 对比

¥1329

¥1329

7

AMD Ryzen 7 5700X

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

8

AMD Ryzen 5 5500

参数 | 图片 | 点评 | 评测 | 对比

¥559

¥559

9

AMD Ryzen 5 5600X

参数 | 图片 | 点评 | 评测 | 对比

¥899

¥899

10

AMD Ryzen 7 3700X

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

CPU性能天梯图

TOP1

AMD Ryzen ThreadRipper 3990X

TOP2

Intel 酷睿 i9 14900K

TOP3

Intel 酷睿 i9 13900K

热门Mini塔式游戏背部理线

1

爱国者YOGO M2

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

2

先马平头哥M2

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

3

华硕TUF GAMING GT502

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

4

玩嘉孤勇者

参数 | 图片 | 点评 | 评测 | 对比

¥129

¥129

5

爱国者星璨 小岚

参数 | 图片 | 点评 | 评测 | 对比

¥219

¥219

6

航嘉暗影猎手5

参数 | 图片 | 点评 | 评测 | 对比

¥88

¥88

7

先马朱雀air

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

8

航嘉S920暴风雪(白)

参数 | 图片 | 点评 | 评测 | 对比

¥189

¥189

9

爱国者YOGO K1

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

10

爱国者JV13

参数 | 图片 | 点评 | 评测 | 对比

¥89

¥89

1

先马平头哥M2

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

2

先马平头哥M7

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

3

放牧者小蜜蜂

参数 | 图片 | 点评 | 评测 | 对比

¥48

¥48

4

先马趣造

参数 | 图片 | 点评 | 评测 | 对比

¥299

¥299

5

鱼巢酷鱼T40

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

6

ICE(玩嘉)绝尘玩家

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

7

乔思伯C2

参数 | 图片 | 点评 | 评测 | 对比

¥168

¥168

8

Tt The Tower 100

参数 | 图片 | 点评 | 评测 | 对比

¥549

¥549

9

IN WIN 肖邦

参数 | 图片 | 点评 | 评测 | 对比

¥489

¥489

10

先马平头哥M1商务版

参数 | 图片 | 点评 | 评测 | 对比

¥129

¥129

1

安钛克暗黑系-复仇者X DA601

参数 | 图片 | 点评 | 评测 | 对比

¥375

¥375

2

航嘉MVP Apollo(阿波罗)

参数 | 图片 | 点评 | 评测 | 对比

¥279

¥279

3

酷冷至尊MB511

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

4

先马平头哥M2 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥119

¥119

5

骨伽乘风MX600

参数 | 图片 | 点评 | 评测 | 对比

¥489

¥489

6

大水牛牛仔K

参数 | 图片 | 点评 | 评测 | 对比

¥59

¥59

7

爱国者黑曼巴

参数 | 图片 | 点评 | 评测 | 对比

¥299

¥299

8

酷冷至尊MB520

参数 | 图片 | 点评 | 评测 | 对比

¥299

¥299

9

酷冷至尊MasterBox Q500L

参数 | 图片 | 点评 | 评测 | 对比

¥278

¥278

10

先马黑洞PRO

参数 | 图片 | 点评 | 评测 | 对比

¥257

¥257

1

爱国者YOGO M2

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

2

华硕TUF GAMING GT502

参数 | 图片 | 点评 | 评测 | 对比

¥949

¥949

3

航嘉暗影猎手5

参数 | 图片 | 点评 | 评测 | 对比

¥88

¥88

4

航嘉S920暴风雪(白)

参数 | 图片 | 点评 | 评测 | 对比

¥189

¥189

5

爱国者YOGO K1

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

6

爱国者JV13

参数 | 图片 | 点评 | 评测 | 对比

¥89

¥89

7

航嘉S980 龙卷风(黑色)

参数 | 图片 | 点评 | 评测 | 对比

¥299

¥299

8

航嘉S960暴风雪X 全景版 黑色

参数 | 图片 | 点评 | 评测 | 对比

¥219

¥219

9

先马黑洞7

参数 | 图片 | 点评 | 评测 | 对比

¥176

¥176

10

先马颜之神mini(AIR版)

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

1

爱国者YOGO M2

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

2

先马平头哥M2

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

3

爱国者星璨 小岚

参数 | 图片 | 点评 | 评测 | 对比

¥219

¥219

4

航嘉暗影猎手5

参数 | 图片 | 点评 | 评测 | 对比

¥88

¥88

5

先马朱雀air

参数 | 图片 | 点评 | 评测 | 对比

¥149

¥149

6

华硕PA602

参数 | 图片 | 点评 | 评测 | 对比

¥1549

¥1549

7

安钛克暗黑系-复仇者X DA601

参数 | 图片 | 点评 | 评测 | 对比

¥375

¥375

8

航嘉MVP Apollo(阿波罗)

参数 | 图片 | 点评 | 评测 | 对比

¥279

¥279

9

先马平头哥M2 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥119

¥119

10

华硕ROG GR701 创世神

参数 | 图片 | 点评 | 评测 | 对比

¥3199

¥3199

快速选机高级搜索 >

100-500元|500-1000元|1000元以上

玻璃侧透|亚克力|铝制|静音|复古

热门游戏白金牌主动式PFC电源

1

鑫谷GM750W

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

2

航嘉WD500K

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

3

长城HOPE-6000DS

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

4

微星mag a650bn 650w铜牌

参数 | 图片 | 点评 | 评测 | 对比

¥309

¥309

5

华硕ROG-LOKI-850P-SFX-GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥1749

¥1749

6

ANTEC NE650

参数 | 图片 | 点评 | 评测 | 对比

¥437

¥437

7

鑫谷全模750

参数 | 图片 | 点评 | 评测 | 对比

¥289

¥289

8

航嘉WD650K 全模组

参数 | 图片 | 点评 | 评测 | 对比

¥309

¥309

9

长城HOPE-7000DS

参数 | 图片 | 点评 | 评测 | 对比

¥235

¥235

10

鑫谷全模650

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

1

先马金牌750W

参数 | 图片 | 点评 | 评测 | 对比

¥409

¥409

2

航嘉MVP600

参数 | 图片 | 点评 | 评测 | 对比

¥439

¥439

3

海盗船AX1600i

参数 | 图片 | 点评 | 评测 | 对比

¥3399

¥3399

4

航嘉MVP K650

参数 | 图片 | 点评 | 评测 | 对比

¥559

¥559

5

海盗船RM650x

参数 | 图片 | 点评 | 评测 | 对比

¥680

¥680

6

先马坦克635

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

7

海盗船AX1000

参数 | 图片 | 点评 | 评测 | 对比

¥2649

¥2649

8

先马金牌550W

参数 | 图片 | 点评 | 评测 | 对比

¥269

¥269

9

航嘉MVP K650(全模新版)

参数 | 图片 | 点评 | 评测 | 对比

¥499

¥499

10

航嘉MVP K650(全模版)

参数 | 图片 | 点评 | 评测 | 对比

¥504

¥504

1

ANTEC NE650

参数 | 图片 | 点评 | 评测 | 对比

¥437

¥437

2

华硕ROG-THORⅡ-1600W

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

3

华硕ROG LOKI 洛基 1000W白金 ATX3.0

参数 | 图片 | 点评 | 评测 | 对比

¥1949

¥1949

4

ANTEC NE750 白金牌

参数 | 图片 | 点评 | 评测 | 对比

¥599

¥599

5

航嘉MVP P1000

参数 | 图片 | 点评 | 评测 | 对比

¥1399

¥1399

6

华硕ROG-THOR-1200P2

参数 | 图片 | 点评 | 评测 | 对比

¥599

¥599

7

航嘉MVP P1200

参数 | 图片 | 点评 | 评测 | 对比

¥1199

¥1199

8

振华LEADEX VII 1200W

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

9

SAMA(先马)XP1200 V3版(先马XP1200 雪装版重复)

参数 | 图片 | 点评 | 评测 | 对比

¥959

¥959

10

鑫谷GP700P白金版

参数 | 图片 | 点评 | 评测 | 对比

¥379

¥379

1

鑫谷GM750W

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

2

航嘉WD500K

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

3

长城HOPE-6000DS

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

4

华硕ROG-LOKI-850P-SFX-GAMING

参数 | 图片 | 点评 | 评测 | 对比

¥1749

¥1749

5

ANTEC NE650

参数 | 图片 | 点评 | 评测 | 对比

¥437

¥437

6

鑫谷全模750

参数 | 图片 | 点评 | 评测 | 对比

¥289

¥289

7

航嘉WD650K 全模组

参数 | 图片 | 点评 | 评测 | 对比

¥309

¥309

8

长城HOPE-7000DS

参数 | 图片 | 点评 | 评测 | 对比

¥235

¥235

9

鑫谷全模650

参数 | 图片 | 点评 | 评测 | 对比

¥259

¥259

10

振华LEADEX III HG 850W

参数 | 图片 | 点评 | 评测 | 对比

¥758

¥758

电源天梯图

TOP1

海盗船 AX1600i

TOP2

海盗船 AX1000

TOP3

海盗船 AX1500i

热门台式笔记本SSHD混合固态

1

西部数据蓝盘 1TB 7200转 64MB SATA3(WD10EZEX)

参数 | 图片 | 点评 | 评测 | 对比

¥359

¥359

2

希捷BarraCuda 2TB 7200转 256MB SATA3(ST2000DM008)

参数 | 图片 | 点评 | 评测 | 对比

¥409

¥409

3

希捷银河Exos X16 16TB 7200转 256MB SAS(ST16000NM002G)

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

4

东芝1TB 5400转 128M SATA3(MQ04ABF100)

参数 | 图片 | 点评 | 评测 | 对比

¥355

¥355

5

huananzhi WD500G 西数蓝盘500G

参数 | 图片 | 点评 | 评测 | 对比

¥31

¥31

6

HGST 1TB 5400转 128MB SATA3(HTS541010B7E610)

参数 | 图片 | 点评 | 评测 | 对比

¥450

¥450

7

西部数据蓝盘 2TB 7200转 256MB SATA3(WD20EZBX)

参数 | 图片 | 点评 | 评测 | 对比

¥429

¥429

8

西部数据蓝盘 4TB 5400转 64M SATA3(WD40EZRZ)

参数 | 图片 | 点评 | 评测 | 对比

¥639

¥639

9

希捷BarraCuda 4TB 5900转 256MB SATA3(ST4000DM004)

参数 | 图片 | 点评 | 评测 | 对比

¥579

¥579

10

希捷Barracuda 1TB 7200转 64MB SATA3(ST1000DM010)

参数 | 图片 | 点评 | 评测 | 对比

¥389

¥389

1

西部数据蓝盘 1TB 7200转 64MB SATA3(WD10EZEX)

参数 | 图片 | 点评 | 评测 | 对比

¥359

¥359

2

希捷BarraCuda 2TB 7200转 256MB SATA3(ST2000DM008)

参数 | 图片 | 点评 | 评测 | 对比

¥409

¥409

3

希捷银河Exos X16 16TB 7200转 256MB SAS(ST16000NM002G)

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

4

huananzhi WD500G 西数蓝盘500G

参数 | 图片 | 点评 | 评测 | 对比

¥31

¥31

5

西部数据蓝盘 2TB 7200转 256MB SATA3(WD20EZBX)

参数 | 图片 | 点评 | 评测 | 对比

¥429

¥429

6

西部数据蓝盘 4TB 5400转 64M SATA3(WD40EZRZ)

参数 | 图片 | 点评 | 评测 | 对比

¥639

¥639

7

希捷BarraCuda 4TB 5900转 256MB SATA3(ST4000DM004)

参数 | 图片 | 点评 | 评测 | 对比

¥579

¥579

8

希捷Barracuda 1TB 7200转 64MB SATA3(ST1000DM010)

参数 | 图片 | 点评 | 评测 | 对比

¥389

¥389

9

西部数据红盘Plus 4TB 5400转 256MB SATA3(WD40EFPX)

参数 | 图片 | 点评 | 评测 | 对比

¥789

¥789

10

希捷酷狼PRO 4TB 7200转 256MB SATA3(ST4000NE001)

参数 | 图片 | 点评 | 评测 | 对比

¥809

¥809

1

东芝1TB 5400转 128M SATA3(MQ04ABF100)

参数 | 图片 | 点评 | 评测 | 对比

¥355

¥355

2

HGST 1TB 5400转 128MB SATA3(HTS541010B7E610)

参数 | 图片 | 点评 | 评测 | 对比

¥450

¥450

3

西部数据蓝盘 1TB 5400转 128MB SATA3(WD10SPZX)

参数 | 图片 | 点评 | 评测 | 对比

¥349

¥349

4

西部数据黑盘 500GB 7200转 32MB SATA3(WD5000LPLX)

参数 | 图片 | 点评 | 评测 | 对比

¥218

¥218

5

希捷BarraCuda 2TB 5400转 128MB SATA3(ST2000LM015)

参数 | 图片 | 点评 | 评测 | 对比

¥489

¥489

6

西部数据蓝盘 2TB 5400转 128MB SATA3(WD20SPZX)

参数 | 图片 | 点评 | 评测 | 对比

¥469

¥469

7

希捷Barracuda 1TB 5400转 128MB SATA3(ST1000LM048)

参数 | 图片 | 点评 | 评测 | 对比

¥369

¥369

8

西部数据蓝盘 500GB 5400转 8M SATA3(WD5000LPVX)

参数 | 图片 | 点评 | 评测 | 对比

¥339

¥339

9

西部数据蓝盘 4TB 5400转 128M SATA3(WD40NPZZ)

参数 | 图片 | 点评 | 评测 | 对比

¥769

¥769

10

西部数据蓝盘 500GB 5400转16MB SATA3(WD5000LPCX)

参数 | 图片 | 点评 | 评测 | 对比

¥299

¥299

1

东芝1TB 5400转 128M SATA3(MQ04ABF100)

参数 | 图片 | 点评 | 评测 | 对比

¥355

¥355

2

东芝2TB 5400转 128MB SATA3(MQ04ABD200)

参数 | 图片 | 点评 | 评测 | 对比

¥475

¥475

3

东芝500GB 5400转 64M SATA3(MQ02ABF050H)

参数 | 图片 | 点评 | 评测 | 对比

¥194

¥194

4

希捷FireCuda 1TB 7200转 64MB SATA3(ST1000DX002)

参数 | 图片 | 点评 | 评测 | 对比

¥452

¥452

5

西部数据红盘 2TB 5400转 256M SATA3(WD20EFAX)

参数 | 图片 | 点评 | 评测 | 对比

¥489

¥489

6

西部数据红盘 6TB 5400转 256M SATA3(WD60EFAX)

参数 | 图片 | 点评 | 评测 | 对比

¥1349

¥1349

7

东芝500GB 5400转 32MB SATA3(MQ01ABF050H)

参数 | 图片 | 点评 | 评测 | 对比

¥289

¥289

1

铠侠EXCERIA G2(1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥499

¥499

2

三星990 PRO NVMe M.2(4TB)

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

3

金士顿NV2 NVMe(1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥439

¥439

4

致态TiPlus7100(2TB)

参数 | 图片 | 点评 | 评测 | 对比

¥1044

¥1044

5

西部数据WD_BLACK SN850X 2TB

参数 | 图片 | 点评 | 评测 | 对比

¥1279

¥1279

6

梵想S500 PRO(1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥449

¥449

7

致态TiPlus7100(1TB)

参数 | 图片 | 点评 | 评测 | 对比

¥594

¥594

8

长江存储·致态Ti600 1TB

参数 | 图片 | 点评 | 评测 | 对比

¥494

¥494

9

金士顿A400(240GB)

参数 | 图片 | 点评 | 评测 | 对比

¥189

¥189

10

金士顿A400(480GB)

参数 | 图片 | 点评 | 评测 | 对比

¥279

¥279

SSD硬盘天梯图

TOP1

三星 980 PRO NVMe M.2(1TB)

TOP2

希捷 酷玩530(2TB)

TOP3

微星 SPATIUM HS M480(2TB)

显示器键盘鼠标数位板

1

HKC IG27Q

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

2

KTC H27S12

参数 | 图片 | 点评 | 评测 | 对比

¥1499

¥1499

3

飞利浦27E1N5900E

参数 | 图片 | 点评 | 评测 | 对比

¥1549

¥1549

4

AOC 27G2

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

5

小米曲面显示器

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

6

AOC U27U2

参数 | 图片 | 点评 | 评测 | 对比

¥2199

¥2199

7

飞利浦EVNIA 42M2N8900

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

8

AOC AGON AG276QZD

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

9

ZOWIE GEAR XL2566K

参数 | 图片 | 点评 | 评测 | 对比

¥5499

¥5499

10

AOC Q27G2S/D

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

1

罗技G610 Orion游戏机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥489

¥489

2

Cherry MX1.0 G80-3815LYAEU-2 机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥439

¥439

3

罗技K845机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥269

¥269

4

雷柏V500PRO混彩背光游戏机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

5

达尔优A87天空版机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥379

¥379

6

微星GK50Z 机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥139

¥139

7

RK RK98三模机械键盘 青轴

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

8

雷柏V500PRO深海迷雾背光游戏机械键盘

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

9

罗技K580无线蓝牙键盘

参数 | 图片 | 点评 | 评测 | 对比

¥198

¥198

10

狼蛛F87

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

1

优派MW291鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥29

¥29

2

优派MU255II代

参数 | 图片 | 点评 | 评测 | 对比

¥20

¥20

3

罗技G304Lightspeed 无线游戏鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥189

¥189

4

Razer 蝰蛇标准版有线鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥107

¥107

5

雷柏M300G多模式无线充电鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥49

¥49

6

达尔优A950

参数 | 图片 | 点评 | 评测 | 对比

¥179

¥179

7

优派弑神MU681电竞鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

8

罗技G502 HERO游戏鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥209

¥209

9

罗技G Pro游戏鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥99

¥99

10

罗技GPW LIGHTSPEED 无线游戏鼠标

参数 | 图片 | 点评 | 评测 | 对比

¥459

¥459

1

清华同方TF009

参数 | 图片 | 点评 | 评测 | 对比

¥46

¥46

2

Wacom PTH-660

参数 | 图片 | 点评 | 评测 | 对比

¥2880

¥2880

3

汉王免驱唐人笔手写板

参数 | 图片 | 点评 | 评测 | 对比

¥94

¥94

4

高漫1060PRO数位板

参数 | 图片 | 点评 | 评测 | 对比

¥136

¥136

5

高漫1060PRO

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

6

绘王HC16

参数 | 图片 | 点评 | 评测 | 对比

¥178

¥178

7

友基漫影H960(入门级)

参数 | 图片 | 点评 | 评测 | 对比

¥154

¥154

8

Wacom CTL-672/K0-F

参数 | 图片 | 点评 | 评测 | 对比

¥495

¥495

9

Wacom 影拓PTM CTH-680/S0-F

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

10

Wacom CTL-672/K2

参数 | 图片 | 点评 | 评测 | 对比

¥495

¥495

快速选机高级搜索 >

500-2499元|2500-4999元|5000元以上

曲面|5K|4K|便携|广视角|护眼

大家电/厨卫/生活家电

电视|洗衣机|空调|冰箱|小家电|高清|智能影音|智能锁|智能马桶盖

寰宇万象·TCL QD-Mini LED电视新品发布会

超大容量超能洗!华帝巨能洗洗碗机全面评测

【有料评测】将“好用好看好清洁”发挥到极致 华帝集成烹饪中心评测

首款自动换拖布的扫地机器人上线,乐图解锁智慧清洁新生活

有大事发生?2024最强MiniLED电视将问世

3月6日TCLX11H电视震撼发布,这台2024画质天花板究竟强在哪?重磅!TCLX11H正式发布,外观是惊喜大小王重磅来袭!TCL发布2024画质天花板X11H、最值得买 Mini LED 电视Q9KTCL正式发布163吋Micro LED巨幕电视X11H Max科技早报:苹果正式支持第三方应用|非洲手机之王赚600亿|郑州放开皮卡进城蝉联全球第二、中国品牌第一的TCL电视,到底有多少含金量和含新量?不止GPT、Sora,电视也要玩儿AIUDE2024圆满落幕,人潮涌动,笔笔订单开启2024贸易新篇章“方太老友技”:分享人间烟火气,超多惊喜送不停!航嘉高端数码产品闪耀深圳坂田手造文化街,掀起购买热潮!集成烹饪中心如何选?华帝以优质体验解锁“三好”生活3位科技主播畅谈第三代OLED创新技术:META Technology 2.0致力于环保,LG Display接连获两大国际权威环保认证

超大容量超能洗!华帝巨能洗洗碗机全面评测

科技·艺术·家再进阶 三星生活家电新品预约登记开启恒贴边防缠绕 扫拖专家科沃斯地宝T30 PRO全面评测连续9年用户满意度第一,海信电视“中国第一”含金量十足三星电子连续18年蝉联全球电视市场领导者宝座国际权威数据:2023年TCL电视销量蝉联全球第二,民族品牌第一TCL P12H电视上市:诺贝尔奖级量子点技术,定义入门级高端产品2023年全球电视出货量最新排名出炉,海信蝉联全球第二Omdia:TCL继续领跑中国电视,蝉联全球第二开学在即 三星BESPOKE缤色铂格系列产品为孩子健康保驾护航科技早报:Vision Pro难救苹果|Sora爆火48小时才30亿|iOS首次出现木马病毒Switch 2“跳票”至明年,老任开年就跌盘科技早报:iPhone 16镜头首曝|手机品牌鄙视链惹争议|华硕发新款显示器写给女生看:高速吹风机两三百元预算就够了

三星电子在2024 iF设计奖中斩获75项殊荣,OLED电视获得金奖

科技早报:iOS现木马病毒|折叠iPhone开发暂停|孙正义计划1000亿战英伟达这个春节 你买了哪些入手吃灰的家电?过完春节就相亲!相亲之前,别忘了剃剃胡子小米智能手表全攻略:这样选,准没错!假期大扫除:扫地机、吸尘器到底怎么选听我的!春节这么买家电绝对不后悔过年买空净产品性价比高吗?一文看懂性价比超高!这些小米电视值得买!贪便宜买洗烘一体机 结果容量被“打骨折”?关于洗烘一体,你必须要懂……冲牙器真有必要买吗?一文看懂科技早报:小米新机月内登场 | 三星Galaxy F15新图曝光 | Vision Pro退货潮只有电视圈有智商税?看完我惊呆了华为智能手表全攻略:选它,准没错!

电视

洗衣机

空调

冰箱

厨卫

健康

热门OLED4K曲面65英寸以上

1

海信75E3F

参数 | 图片 | 点评 | 评测 | 对比

¥3399

¥3399

2

VIDDA 43V1F-R

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

3

华为智慧屏 V5 Pro 98英寸

参数 | 图片 | 点评 | 评测 | 对比

¥34999

¥34999

4

索尼KD-85X85K

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

5

LG OLED55CXPCA

参数 | 图片 | 点评 | 评测 | 对比

¥10399

¥10399

6

三星QA85QN85ZAJXXZ

参数 | 图片 | 点评 | 评测 | 对比

¥26499

¥26499

7

海信75E3H

参数 | 图片 | 点评 | 评测 | 对比

¥2959

¥2959

8

华为Vision智慧屏 SE3 55英寸

参数 | 图片 | 点评 | 评测 | 对比

¥2489

¥2489

9

华为智慧屏 V5 85英寸

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

10

华为Vision智慧屏3代 65英寸

参数 | 图片 | 点评 | 评测 | 对比

¥3938

¥3938

1

LG OLED55CXPCA

参数 | 图片 | 点评 | 评测 | 对比

¥10399

¥10399

2

小米电视6 OLED 65英寸

参数 | 图片 | 点评 | 评测 | 对比

¥7699

¥7699

3

LG OLED77C8PCA

参数 | 图片 | 点评 | 评测 | 对比

¥19989

¥19989

4

华为智慧屏 X65

参数 | 图片 | 点评 | 评测 | 对比

¥12999

¥12999

5

LG OLED55C1PCB

参数 | 图片 | 点评 | 评测 | 对比

¥10999

¥10999

6

索尼XR-55A80J

参数 | 图片 | 点评 | 评测 | 对比

¥8399

¥8399

7

小米透明电视

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

8

小米电视大师 65英寸

参数 | 图片 | 点评 | 评测 | 对比

¥12666

¥12666

9

索尼KD-55A9G

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

10

索尼KD-65A1

参数 | 图片 | 点评 | 评测 | 对比

¥9598

¥9598

1

海信75E3F

参数 | 图片 | 点评 | 评测 | 对比

¥3399

¥3399

2

LG OLED55CXPCA

参数 | 图片 | 点评 | 评测 | 对比

¥10399

¥10399

3

TCL 55L2

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

4

小米全面屏电视E55A

参数 | 图片 | 点评 | 评测 | 对比

¥2688

¥2688

5

索尼KD-55X9000E

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

6

长虹75D5P PRO

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

7

Redmi 智能电视 A55

参数 | 图片 | 点评 | 评测 | 对比

¥629

¥629

8

小米电视4A 55英寸

参数 | 图片 | 点评 | 评测 | 对比

¥2389

¥2389

9

索尼KD-55X9000F

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

10

小米全面屏电视E65C

参数 | 图片 | 点评 | 评测 | 对比

¥2228

¥2228

1

小米电视4S 55英寸 曲面

参数 | 图片 | 点评 | 评测 | 对比

¥2689

¥2689

2

TCL 55A950C

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

3

康佳OLED65V91U

参数 | 图片 | 点评 | 评测 | 对比

¥10888

¥10888

4

TCL 55N3

参数 | 图片 | 点评 | 评测 | 对比

¥1969

¥1969

5

海信LED55MU8600UC

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

6

飞利浦55PUF6092/T3

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

7

索尼KD-65S8500D

参数 | 图片 | 点评 | 评测 | 对比

¥16999

¥16999

8

三星UA65JU6800

参数 | 图片 | 点评 | 评测 | 对比

¥8199

¥8199

9

海信HZ55A66

参数 | 图片 | 点评 | 评测 | 对比

¥6999

¥6999

10

长虹55E9600

参数 | 图片 | 点评 | 评测 | 对比

¥2688

¥2688

1

海信75E3F

参数 | 图片 | 点评 | 评测 | 对比

¥3399

¥3399

2

华为智慧屏 V5 Pro 98英寸

参数 | 图片 | 点评 | 评测 | 对比

¥34999

¥34999

3

索尼KD-85X85K

参数 | 图片 | 点评 | 评测 | 对比

¥7999

¥7999

4

三星QA85QN85ZAJXXZ

参数 | 图片 | 点评 | 评测 | 对比

¥26499

¥26499

5

海信75E3H

参数 | 图片 | 点评 | 评测 | 对比

¥2959

¥2959

6

华为智慧屏 V5 85英寸

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

7

华为Vision智慧屏3代 65英寸

参数 | 图片 | 点评 | 评测 | 对比

¥3938

¥3938

8

TCL 75P12G

参数 | 图片 | 点评 | 评测 | 对比

¥8599

¥8599

9

TCL 75V8E

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

10

华为智慧屏SE 75英寸

参数 | 图片 | 点评 | 评测 | 对比

¥2989

¥2989

快速选机高级搜索 >

1000-4999元|5000-9999元|10000元以上

OLED|曲面|游戏|超薄|智慧屏

热门滚筒波轮洗烘一体智能变频

1

米家洗衣机mini(XQB10MJ501)

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

2

松下XQB100-3K1N7

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

3

海尔EG100MATE2S

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

4

小天鹅TG100V88WMUIADY5

参数 | 图片 | 点评 | 评测 | 对比

¥3299

¥3299

5

TCL 双子舱洗烘护集成机T10

参数 | 图片 | 点评 | 评测 | 对比

¥5999

¥5999

6

小天鹅TB30VH80E

参数 | 图片 | 点评 | 评测 | 对比

¥829

¥829

7

西门子WD14G4631W

参数 | 图片 | 点评 | 评测 | 对比

¥6959

¥6959

8

小天鹅TB80V23H

参数 | 图片 | 点评 | 评测 | 对比

¥819

¥819

9

美的MB90V37E

参数 | 图片 | 点评 | 评测 | 对比

¥749

¥749

10

小天鹅TG100VT096WDG-Y1T

参数 | 图片 | 点评 | 评测 | 对比

¥1768

¥1768

1

海尔EG100MATE2S

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

2

小天鹅TG100V88WMUIADY5

参数 | 图片 | 点评 | 评测 | 对比

¥3299

¥3299

3

小天鹅TG100VT096WDG-Y1T

参数 | 图片 | 点评 | 评测 | 对比

¥1768

¥1768

4

美的MG100V33WY

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

5

创维XQG80-B15MC

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

6

小天鹅TG100V618PLUS

参数 | 图片 | 点评 | 评测 | 对比

¥2799

¥2799

7

小天鹅TG100V23WDY

参数 | 图片 | 点评 | 评测 | 对比

¥1768

¥1768

8

西门子XQG100-WN54A2X40W

参数 | 图片 | 点评 | 评测 | 对比

¥4799

¥4799

9

海尔G100958BD14GU1

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

10

海尔G10078BD14LS

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

1

松下XQB100-3K1N7

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

2

小天鹅TB30VH80E

参数 | 图片 | 点评 | 评测 | 对比

¥829

¥829

3

小天鹅TB80V23H

参数 | 图片 | 点评 | 评测 | 对比

¥819

¥819

4

美的MB90V37E

参数 | 图片 | 点评 | 评测 | 对比

¥749

¥749

5

海尔EB100M30Pro1

参数 | 图片 | 点评 | 评测 | 对比

¥989

¥989

6

志高XQB75-3801

参数 | 图片 | 点评 | 评测 | 对比

¥578

¥578

7

志高XQB48-3806

参数 | 图片 | 点评 | 评测 | 对比

¥528

¥528

8

小天鹅TB100V23H

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

9

三洋DB80577IES

参数 | 图片 | 点评 | 评测 | 对比

¥1898

¥1898

10

海尔EB100B20Mate1

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

1

西门子WD14G4631W

参数 | 图片 | 点评 | 评测 | 对比

¥6959

¥6959

2

米家XHQG120MJ202

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

3

海尔XQG100-HB106C

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

4

TCL G100V200-HD

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

5

博世WDG284661W

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

6

小天鹅TD100V23WDY

参数 | 图片 | 点评 | 评测 | 对比

¥1579

¥1579

7

三洋WF100BHE575S

参数 | 图片 | 点评 | 评测 | 对比

¥3399

¥3399

8

小天鹅TD100MS9ILZ

参数 | 图片 | 点评 | 评测 | 对比

¥7539

¥7539

9

小天鹅TD100VT616WIADY-T1B

参数 | 图片 | 点评 | 评测 | 对比

¥2569

¥2569

10

海尔EG8014HB39GU1

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

1

海尔EG100MATE2S

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

2

小天鹅TG100V88WMUIADY5

参数 | 图片 | 点评 | 评测 | 对比

¥3299

¥3299

3

西门子WD14G4631W

参数 | 图片 | 点评 | 评测 | 对比

¥6959

¥6959

4

小天鹅TG100VT096WDG-Y1T

参数 | 图片 | 点评 | 评测 | 对比

¥1768

¥1768

5

米家XHQG120MJ202

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

6

美的MG100V33WY

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

7

创维XQG80-B15MC

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

8

海尔EB100B20Mate1

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

9

小天鹅TB100V23DB

参数 | 图片 | 点评 | 评测 | 对比

¥1169

¥1169

10

卡萨帝C3 3W1U1

参数 | 图片 | 点评 | 评测 | 对比

¥2989

¥2989

快速选机高级搜索 >

2000元以下|2000-4000元|6000元以上

滚筒|波轮|洗烘一体|双缸|迷你

热门1.5匹2.0匹静音变频中央空调

1

格力KFR-35GW/NhGc1B

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

2

华凌KFR-50GW/N8HL1

参数 | 图片 | 点评 | 评测 | 对比

¥2869

¥2869

3

格力KFR-35GW/(35592)FNhAa-A3

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

4

海尔KFR-72LW/28KCA81U1

参数 | 图片 | 点评 | 评测 | 对比

¥5699

¥5699

5

奥克斯KFR-35GW/BpR3AQE1(B3)

参数 | 图片 | 点评 | 评测 | 对比

¥1969

¥1969

6

美的KFR-72LW/N8MZB1

参数 | 图片 | 点评 | 评测 | 对比

¥6899

¥6899

7

格力KFR-72LW/NhGm1BAj

参数 | 图片 | 点评 | 评测 | 对比

¥6899

¥6899

8

格力KFR-72LW/(72516)FNhAa-B1

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

9

格力KFR-35GW/NhGe3B

参数 | 图片 | 点评 | 评测 | 对比

¥2649

¥2649

10

华凌KFR-35GW/N8HE1

参数 | 图片 | 点评 | 评测 | 对比

¥2269

¥2269

1

格力KFR-35GW/NhGc1B

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

2

格力KFR-35GW/(35592)FNhAa-A3

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

3

奥克斯KFR-35GW/BpR3AQE1(B3)

参数 | 图片 | 点评 | 评测 | 对比

¥1969

¥1969

4

格力KFR-35GW/NhGe3B

参数 | 图片 | 点评 | 评测 | 对比

¥2649

¥2649

5

华凌KFR-35GW/N8HE1

参数 | 图片 | 点评 | 评测 | 对比

¥2269

¥2269

6

华凌KFR-35GW/N8HE1Pro

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

7

美的KFR-35GW/N8KS1-1

参数 | 图片 | 点评 | 评测 | 对比

¥2649

¥2649

8

华凌KFR-35GW/N8HG1

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

9

小米KFR-35GW/N1A1

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

10

美的KFR-35GW/N8VHA1

参数 | 图片 | 点评 | 评测 | 对比

¥2549

¥2549

1

华凌KFR-50GW/N8HL1

参数 | 图片 | 点评 | 评测 | 对比

¥2869

¥2869

2

美的KFR-50GW/G2-3

参数 | 图片 | 点评 | 评测 | 对比

¥4999

¥4999

3

美的KFR-50GW/N8MXA3

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

4

格力KFR-50LW/(50530)FNhAk-B3

参数 | 图片 | 点评 | 评测 | 对比

¥4799

¥4799

5

海信KFR-50LW/A190-X3

参数 | 图片 | 点评 | 评测 | 对比

¥3069

¥3069

6

格力KFR-50LW/NhGm3BAj

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

7

小米KFR-51LW/N1A1

参数 | 图片 | 点评 | 评测 | 对比

¥3889

¥3889

8

格力KFR-50LW/(50530)FNhAb-B1

参数 | 图片 | 点评 | 评测 | 对比

¥6199

¥6199

9

小米KFR-50GW/D1A1

参数 | 图片 | 点评 | 评测 | 对比

¥3079

¥3079

10

格力KFR-50LW/(50532)NhAa-3

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

1

格力KFR-35GW/(35592)FNhAa-A3

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

2

华凌KFR-35GW/N8HE1

参数 | 图片 | 点评 | 评测 | 对比

¥2269

¥2269

3

小米KFR-72LW/N1A1

参数 | 图片 | 点评 | 评测 | 对比

¥4899

¥4899

4

小米KFR-35GW/N1A1

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

5

美的KFR-35GW/N8VHA1

参数 | 图片 | 点评 | 评测 | 对比

¥2549

¥2549

6

格力GMV-H200WL/A

参数 | 图片 | 点评 | 评测 | 对比

¥42588

¥42588

7

格力KFR-35GW/(35530)FNhAk-B3

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

8

格力KFR-32GW/(32570)Ga-3

参数 | 图片 | 点评 | 评测 | 对比

¥3099

¥3099

9

海尔KFR-35GW/01KGC81U1

参数 | 图片 | 点评 | 评测 | 对比

¥2369

¥2369

10

格力KFR-72LW/(72591)NhAa-3

参数 | 图片 | 点评 | 评测 | 对比

¥7499

¥7499

1

格力KFR-35GW/NhGc1B

参数 | 图片 | 点评 | 评测 | 对比

¥2999

¥2999

2

华凌KFR-50GW/N8HL1

参数 | 图片 | 点评 | 评测 | 对比

¥2869

¥2869

3

格力KFR-35GW/(35592)FNhAa-A3

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

4

海尔KFR-72LW/28KCA81U1

参数 | 图片 | 点评 | 评测 | 对比

¥5699

¥5699

5

奥克斯KFR-35GW/BpR3AQE1(B3)

参数 | 图片 | 点评 | 评测 | 对比

¥1969

¥1969

6

美的KFR-72LW/N8MZB1

参数 | 图片 | 点评 | 评测 | 对比

¥6899

¥6899

7

格力KFR-72LW/NhGm1BAj

参数 | 图片 | 点评 | 评测 | 对比

¥6899

¥6899

8

格力KFR-72LW/(72516)FNhAa-B1

参数 | 图片 | 点评 | 评测 | 对比

¥15999

¥15999

9

格力KFR-35GW/NhGe3B

参数 | 图片 | 点评 | 评测 | 对比

¥2649

¥2649

10

华凌KFR-35GW/N8HE1

参数 | 图片 | 点评 | 评测 | 对比

¥2269

¥2269

1

格力GMV-H100WL/F一拖四

参数 | 图片 | 点评 | 评测 | 对比

¥33500

¥33500

2

格力GMV-H200WL/A

参数 | 图片 | 点评 | 评测 | 对比

¥42588

¥42588

3

格力GMV-H140WL/A

参数 | 图片 | 点评 | 评测 | 对比

¥25149

¥25149

4

日立RAS-72FN9Q

参数 | 图片 | 点评 | 评测 | 对比

¥12899

¥12899

5

日立RAS-125HRN5QB

参数 | 图片 | 点评 | 评测 | 对比

¥38899

¥38899

6

格力RF28WPd/BNa

参数 | 图片 | 点评 | 评测 | 对比

¥29959

¥29959

7

日立RAS-140FSVN5Q一拖四

参数 | 图片 | 点评 | 评测 | 对比

¥50619

¥50619

8

格力GMV-H160WL/A

参数 | 图片 | 点评 | 评测 | 对比

¥28699

¥28699

9

美的KFR-72T2W/BP2DN1-TR

参数 | 图片 | 点评 | 评测 | 对比

¥4310

¥4310

10

美的RF26W/BPSDN1-D1

参数 | 图片 | 点评 | 评测 | 对比

¥19800

¥19800

快速选机高级搜索 >

2000元以下|2000-3999元|4000-6000元

壁挂|立柜|嵌入|移动(小)|中央空调

热门多门三门对开十字对开

1

容声BCD-501WD18FP

参数 | 图片 | 点评 | 评测 | 对比

¥3659

¥3659

2

海尔BCD-545WFPB

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

3

海尔BCD-216STPT

参数 | 图片 | 点评 | 评测 | 对比

¥1149

¥1149

4

卡萨帝BCD-635WVPAU1

参数 | 图片 | 点评 | 评测 | 对比

¥7799

¥7799

5

TCL R455T9-UQ

参数 | 图片 | 点评 | 评测 | 对比

¥2889

¥2889

6

美的BCD-508WTPZM(E)

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

7

海尔BCD-335WLHFD9DS9

参数 | 图片 | 点评 | 评测 | 对比

¥2648

¥2648

8

海尔BCD-535WGHSSEDS9

参数 | 图片 | 点评 | 评测 | 对比

¥2598

¥2598

9

海尔BCD-118TMPA

参数 | 图片 | 点评 | 评测 | 对比

¥779

¥779

10

海尔BCD-253WDPDU1

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

1

美的BCD-508WTPZM(E)

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

2

海尔BCD-335WLHFD9DS9

参数 | 图片 | 点评 | 评测 | 对比

¥2648

¥2648

3

容声BCD-329WD16MP

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

4

海尔BCD-510WGHFD59S9U1

参数 | 图片 | 点评 | 评测 | 对比

¥4599

¥4599

5

海信BCD-328WNK1DPT

参数 | 图片 | 点评 | 评测 | 对比

¥2269

¥2269

6

容声BCD-206D11N

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

7

西门子KM49EA20TI

参数 | 图片 | 点评 | 评测 | 对比

¥5198

¥5198

8

容声BCD-526WD13MPA

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

9

海尔BCD-501WLHTS79B9U1

参数 | 图片 | 点评 | 评测 | 对比

¥4499

¥4499

10

西门子KF98FA156C

参数 | 图片 | 点评 | 评测 | 对比

¥13762

¥13762

1

海尔BCD-216STPT

参数 | 图片 | 点评 | 评测 | 对比

¥1149

¥1149

2

海尔BCD-253WDPDU1

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

3

海尔BCD-218STPS

参数 | 图片 | 点评 | 评测 | 对比

¥1139

¥1139

4

西门子BCD-484W(KM48EA20TI)

参数 | 图片 | 点评 | 评测 | 对比

¥5089

¥5089

5

容声BCD-252WD18NP

参数 | 图片 | 点评 | 评测 | 对比

¥1759

¥1759

6

海尔BCD-235WLHC35DDY

参数 | 图片 | 点评 | 评测 | 对比

¥1689

¥1689

7

海尔BCD-216WMPT

参数 | 图片 | 点评 | 评测 | 对比

¥1699

¥1699

8

海尔BCD-223WDPT

参数 | 图片 | 点评 | 评测 | 对比

¥1749

¥1749

9

美的BCD-213TM(E)

参数 | 图片 | 点评 | 评测 | 对比

¥1159

¥1159

10

松下NR-JS30AX1-W

参数 | 图片 | 点评 | 评测 | 对比

¥3090

¥3090

1

容声BCD-501WD18FP

参数 | 图片 | 点评 | 评测 | 对比

¥3659

¥3659

2

海尔BCD-545WFPB

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

3

卡萨帝BCD-635WVPAU1

参数 | 图片 | 点评 | 评测 | 对比

¥7799

¥7799

4

海尔BCD-535WGHSSEDS9

参数 | 图片 | 点评 | 评测 | 对比

¥2598

¥2598

5

容声BCD-646WD11HPA

参数 | 图片 | 点评 | 评测 | 对比

¥2659

¥2659

6

海尔BCD-465WGHTDE9S9

参数 | 图片 | 点评 | 评测 | 对比

¥3169

¥3169

7

容声BCD-502WD1FPQ

参数 | 图片 | 点评 | 评测 | 对比

¥4799

¥4799

8

海尔BCD-656WGHTDV9N9U1

参数 | 图片 | 点评 | 评测 | 对比

¥4779

¥4779

9

海尔BCD-480WBPT

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

10

海信BCD-463WMK1DPJ

参数 | 图片 | 点评 | 评测 | 对比

¥2379

¥2379

1

容声BCD-501WD18FP

参数 | 图片 | 点评 | 评测 | 对比

¥3659

¥3659

2

海尔BCD-545WFPB

参数 | 图片 | 点评 | 评测 | 对比

¥3599

¥3599

3

卡萨帝BCD-635WVPAU1

参数 | 图片 | 点评 | 评测 | 对比

¥7799

¥7799

4

海尔BCD-465WGHTDE9S9

参数 | 图片 | 点评 | 评测 | 对比

¥3169

¥3169

5

容声BCD-502WD1FPQ

参数 | 图片 | 点评 | 评测 | 对比

¥4799

¥4799

6

海尔BCD-656WGHTDV9N9U1

参数 | 图片 | 点评 | 评测 | 对比

¥4779

¥4779

7

海信BCD-463WMK1DPJ

参数 | 图片 | 点评 | 评测 | 对比

¥2379

¥2379

8

西门子KC502081EC

参数 | 图片 | 点评 | 评测 | 对比

¥4699

¥4699

9

容声BCD-465WD18FP

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

10

容声BCD-452WD12FP

参数 | 图片 | 点评 | 评测 | 对比

¥2689

¥2689

快速选机高级搜索 >

5000元以下|5000-9000元|9000元以上

多门|三门|双门|单门|十字对开

集成灶抽油烟机洗碗机热水器智能马桶

1

美大H9-ZK(天然气)

参数 | 图片 | 点评 | 评测 | 对比

¥12199

¥12199

2

火星人Q6BC

参数 | 图片 | 点评 | 评测 | 对比

¥19880

¥19880

3

亿田S8C(天然气)

参数 | 图片 | 点评 | 评测 | 对比

¥19100

¥19100

4

森歌i5ZKZ-G 天然气

参数 | 图片 | 点评 | 评测 | 对比

¥23380

¥23380

5

方太S1.i/ZK 天然气

参数 | 图片 | 点评 | 评测 | 对比

¥13980

¥13980

6

潮邦M5zk(f) 天然气

参数 | 图片 | 点评 | 评测 | 对比

¥18800

¥18800

7

帅丰X1双子星

参数 | 图片 | 点评 | 评测 | 对比

¥22086

¥22086

8

奥田蒸烤一体集成灶ZKM4-AI 天然气

参数 | 图片 | 点评 | 评测 | 对比

¥11599

¥11599

9

海尔90EJ- DQ1CH

参数 | 图片 | 点评 | 评测 | 对比

¥9499

¥9499

10

老板9QC03 天然气

参数 | 图片 | 点评 | 评测 | 对比

¥15499

¥15499

1

澳柯玛CXW-258AJ903

参数 | 图片 | 点评 | 评测 | 对比

¥2799

¥2799

2

方太CXW-258-JCD7

参数 | 图片 | 点评 | 评测 | 对比

¥2349

¥2349

3

澳柯玛CXW-300BJ909

参数 | 图片 | 点评 | 评测 | 对比

¥2299

¥2299

4

老板CXW-260-27A3H

参数 | 图片 | 点评 | 评测 | 对比

¥2229

¥2229

5

海尔CXW-200-E800C6J

参数 | 图片 | 点评 | 评测 | 对比

¥859

¥859

6

云米Cross

参数 | 图片 | 点评 | 评测 | 对比

¥1665

¥1665

7

澳柯玛CXW-300BJ529

参数 | 图片 | 点评 | 评测 | 对比

¥3699

¥3699

8

老板CXW-260-28D3S

参数 | 图片 | 点评 | 评测 | 对比

¥2599

¥2599

9

华帝理想家X6

参数 | 图片 | 点评 | 评测 | 对比

¥4249

¥4249

10

海尔CXW-219-E900T3S

参数 | 图片 | 点评 | 评测 | 对比

¥1099

¥1099

1

松下NP-K8RAH1D

参数 | 图片 | 点评 | 评测 | 对比

¥1998

¥1998

2

西门子SZ06AXCFI

参数 | 图片 | 点评 | 评测 | 对比

¥725

¥725

3

西门子SJ23HI88MC

参数 | 图片 | 点评 | 评测 | 对比

¥6099

¥6099

4

海尔W30-EYBW142286GGU1

参数 | 图片 | 点评 | 评测 | 对比

¥3587

¥3587

5

松下NP-TF6WK1Y

参数 | 图片 | 点评 | 评测 | 对比

¥2799

¥2799

6

米家WQP12-01

参数 | 图片 | 点评 | 评测 | 对比

¥2399

¥2399

7

西门子SC73E610TI

参数 | 图片 | 点评 | 评测 | 对比

¥4599

¥4599

8

方太JPCD12E-02-NJ01

参数 | 图片 | 点评 | 评测 | 对比

¥4549

¥4549

9

海尔HTAW50STGB(黑色)

参数 | 图片 | 点评 | 评测 | 对比

¥1599

¥1599

10

方太JBSD2F-E5/E5L

参数 | 图片 | 点评 | 评测 | 对比

¥8999

¥8999

1

海尔EC6001-PD3(U1)

参数 | 图片 | 点评 | 评测 | 对比

¥849

¥849

2

万家乐JSQ24-D13

参数 | 图片 | 点评 | 评测 | 对比

¥648

¥648

3

万和E60-Q2WY10-20

参数 | 图片 | 点评 | 评测 | 对比

¥649

¥649

4

四季沐歌Q-B-J-1-155/2.50/0.05

参数 | 图片 | 点评 | 评测 | 对比

¥3580

¥3580

5

万家乐D40-H111B

参数 | 图片 | 点评 | 评测 | 对比

¥396

¥396

6

皇明金冬冠 16支

参数 | 图片 | 点评 | 评测 | 对比

¥5980

¥5980

7

万和E40-T4-22

参数 | 图片 | 点评 | 评测 | 对比

¥399

¥399

8

志高KBR-Y6S(5500W)

参数 | 图片 | 点评 | 评测 | 对比

¥248

¥248

9

海尔Q-B-J-1-145/2.50/0.05-D/L

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

10

A.O.史密斯EWH-10B2

参数 | 图片 | 点评 | 评测 | 对比

¥868

¥868

1

TOTO 智能马桶 标准款/300坑距

参数 | 图片 | 点评 | 评测 | 对比

¥2347

¥2347

2

松下DL-5209CWS

参数 | 图片 | 点评 | 评测 | 对比

¥1199

¥1199

3

海尔V-117

参数 | 图片 | 点评 | 评测 | 对比

¥899

¥899

4

九牧Z1D26A0S

参数 | 图片 | 点评 | 评测 | 对比

¥1899

¥1899

5

箭牌(ARROW)AB1026 马桶300坑距

参数 | 图片 | 点评 | 评测 | 对比

¥1519

¥1519

6

TOTO CES9788WCS 马桶300坑距

参数 | 图片 | 点评 | 评测 | 对比

¥20149

¥20149

7

乐瑞FDB643(长520mm)

参数 | 图片 | 点评 | 评测 | 对比

¥1280

¥1280

8

海尔X-M02

参数 | 图片 | 点评 | 评测 | 对比

¥999

¥999

9

TOTO TCF6631CS

参数 | 图片 | 点评 | 评测 | 对比

¥1498

¥1498

10

松下DL-1309CWS

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

快速选机高级搜索 >

6000元以下|6000-15000元|15000元以上

集成烹饪中心|烟灶消|烟灶蒸烤|烟灶蒸烤消

空气净化器净水器扫地机器人电暖器

1

米家空气净化器4Pro

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

2

小米空气净化器 2

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

3

米家空气净化器4 Lite

参数 | 图片 | 点评 | 评测 | 对比

¥599

¥599

4

霍尼韦尔KJ550F-PAC2156W

参数 | 图片 | 点评 | 评测 | 对比

¥4299

¥4299

5

华为KJ500F-EP500H

参数 | 图片 | 点评 | 评测 | 对比

¥1299

¥1299

6

美的KJ400G-E33

参数 | 图片 | 点评 | 评测 | 对比

¥1198

¥1198

7

霍尼韦尔KJ410F-PAC000AW

参数 | 图片 | 点评 | 评测 | 对比

¥121

¥121

8

霍尼韦尔KJ305F-PAC1101W

参数 | 图片 | 点评 | 评测 | 对比

¥1649

¥1649

9

小米空气净化器3

参数 | 图片 | 点评 | 评测 | 对比

¥789

¥789

10

米家空气净化器 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥1999

¥1999

1

易开得SAT9001Pro

参数 | 图片 | 点评 | 评测 | 对比

¥2080

¥2080

2

康佳KY-A

参数 | 图片 | 点评 | 评测 | 对比

¥5980

¥5980

3

安吉尔J2405-ROB60(A8)

参数 | 图片 | 点评 | 评测 | 对比

¥2568

¥2568

4

沁园KRL5017

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

5

美的MRC1790B-75G

参数 | 图片 | 点评 | 评测 | 对比

¥1698

¥1698

6

小米MR424-A

参数 | 图片 | 点评 | 评测 | 对比

¥199

¥199

7

易开得SAT9001

参数 | 图片 | 点评 | 评测 | 对比

¥1720

¥1720

8

易开得SAT3033-3

参数 | 图片 | 点评 | 评测 | 对比

¥2099

¥2099

9

易开得C2 Pro max

参数 | 图片 | 点评 | 评测 | 对比

¥2680

¥2680

10

安吉尔J2745-ROB60

参数 | 图片 | 点评 | 评测 | 对比

¥3999

¥3999

1

科沃斯T20 PRO

参数 | 图片 | 点评 | 评测 | 对比

¥3500

¥3500

2

米家扫拖机器人2代

参数 | 图片 | 点评 | 评测 | 对比

¥1779

¥1779

3

石头G10

参数 | 图片 | 点评 | 评测 | 对比

¥2489

¥2489

4

追觅S10

参数 | 图片 | 点评 | 评测 | 对比

¥4599

¥4599

5

云鲸J3小鲸灵

参数 | 图片 | 点评 | 评测 | 对比

¥2499

¥2499

6

小洁M2 Pro

参数 | 图片 | 点评 | 评测 | 对比

¥2699

¥2699

7

米家3C

参数 | 图片 | 点评 | 评测 | 对比

¥1049

¥1049

8

米家免洗扫拖机器人2(C101)

参数 | 图片 | 点评 | 评测 | 对比

¥1849

¥1849

9

石头T7S plus

参数 | 图片 | 点评 | 评测 | 对比

¥2899

¥2899

10

石头G20 水箱版

参数 | 图片 | 点评 | 评测 | 对比

¥4599

¥4599

1

艾美特HC22085-W

参数 | 图片 | 点评 | 评测 | 对比

¥399

¥399

2

格力NDY18-X6121

参数 | 图片 | 点评 | 评测 | 对比

¥329

¥329

3

扬子NSB-60(普通开关款)

参数 | 图片 | 点评 | 评测 | 对比

¥49

¥49

4

先锋NDY-20B11(DS6111)

参数 | 图片 | 点评 | 评测 | 对比

¥219

¥219

5

奥克斯NSC-200-13A1

参数 | 图片 | 点评 | 评测 | 对比

¥228

¥228

6

海尔HNS2201A

参数 | 图片 | 点评 | 评测 | 对比

¥399

¥399

7

艾美特HC2202

参数 | 图片 | 点评 | 评测 | 对比

¥448

¥448

8

格力NDYC-25A-WG

参数 | 图片 | 点评 | 评测 | 对比

¥379

¥379

9

格力NDY11-X6026a

参数 | 图片 | 点评 | 评测 | 对比

¥368

¥368

10

先锋DYT-Z2

参数 | 图片 | 点评 | 评测 | 对比

¥239

¥239

快速选机高级搜索 >

500元以下|500-1500元|2500-4000元

除PM2.5|除甲醛|20平米以下|20-30平米

汽车/电动车/极客/软件

教程|

驱动|

壁纸|

手机软件|

爱卡汽车

LG Display车载OLED获TUV莱茵“产品碳足迹”认证

LG Display创新车载显示产品亮相

九号助推短交通产业发展

九号公司冠名LNG战队

全球爆款推新!元PLUS荣耀版11.98万元起,太香了!

汉唐荣耀版16.98万起,比亚迪把燃油车逼到悬崖边上电比油低,入门即高配!宋Pro DM-i荣耀版10.98万元起震撼上市承袭经典科技创新 小牛电动三款旗舰新品引爆2024开年市场电比油低,停不下来,比亚迪推宋PLUS荣耀版和海豹DM-i荣耀版雅迪冠能6代聚光而来!以科技创新为底座,全面迭代夺目上市比亚迪汉荣耀版起售价不到17万 唐荣耀版起售价不到18万将高阶智驾下放至20万级车型 比亚迪“王炸”汉唐荣耀版16.98万起

理想春季发布会汇总 旗舰MPV MEGA售价55.98万起

一文看懂全新极氪001:新豪华猎装轿跑,售价26.9万元起售价26.9万元起,全新极氪001脱胎换骨全能上市全新极氪001价格公布,四个版本26.9万起售3月31日前下定全新极氪001,0元开通ZAD完全智能辅助驾驶系统遥遥领先,极氪001成为全品类高端猎装销量排名第一全新极氪001正式发布,性能、安全、座舱、智驾脱胎换骨猎装进化!全新极氪001曝光信息汇总

小牛电动N系列英雄联盟,电自电摩双新品再破行业天花板

易寻ta是什么软件 易寻ta怎么用简单天气怎么更换手机号 简单天气怎么绑定手机口碑怎么切换账号 口碑切换账号方法怕怕怎么看对方定位?怕怕如何查看对方定位如何合并两个excel表格?两个excel表合并成一个的方法诺基亚手机打开省电模式的操作流程139邮箱设置皮肤颜色的操作流程

装机必备

金舟视频压缩

雷电模拟器

雷神加速器

Office365

双核浏览器

福昕PDF

快快修复

万能数据恢复

秒懂手机

软件下载排行

1

Adobe Reader PDF阅读器

下载

2

夜神安卓模拟器

下载

3

Cool Edit Pro 2.1

下载

4

Adobe Photoshop

下载

5

WinRAR免费版

下载

6

微信电脑版

下载

7

福昕PDF阅读器

下载

8

格式工厂

下载

9

360安全浏览器

下载

10

搜狗拼音输入法

下载

11

爱剪辑

下载

12

Google Chrome浏览器

下载

13

iTunes

下载

14

万能五笔

下载

15

电脑管家

下载

16

驱动精灵万能网卡版

下载

17

谷歌浏览器

下载

18

优酷播放器

下载

19

WPS Office

下载

问答精选

我要提问

GTX970功耗多少?iphone4 怎么不让屏幕不随着手机的摆动而切换横竖屏幕大学学计算机专业的学生电脑普遍配置是什么呢?????怎样设置电脑不让孩子下载游戏。计算机专业买什么笔记本?学习计算机科学与技术专业的学生该买怎么样的电脑?8500GT的功耗是多少?学计算机专业的都买什么笔记本选一体机还是MINIPC?大一的计算机学生应当用什么电脑iphone手机 Apple id提示“已锁定” “已被停用” 怎么处理电脑cpu AMD速龙x4 860和 i3 4160哪个更好小户型家用电脑,有啥推荐吗?什么配粉置的笔记本适于计算机专击业的学生用?在word和excel中,怎样为跨页的表格设定每页相同的标题行?win8怎么设置笔记本电脑不关机盖上盖子后依然处于联网运行状态——联想G510帮我推荐些三千左右性价比比较高的笔记本,谢谢!设置锁屏密码时键盘弹不出来怎么处理重启没有用,是新手机?精品一线二线三线不同大吗怎么让打印机的打印次序从第一页开始打印静佳4d面膜好不好?好用么?怎样把无线路由器恢復原厂设置怎么样把路由器改回初始状态路由器肿么重新设密码肿么改路由器的密码,急!!!求步骤!!!wifi无线路由器怎么使用迈克菲杀毒软件肿么用?修改了宽带密码无线路由器怎么弄才能上网无线网卡怎么使用?博爱boai网络路由器说明书

论坛精选/众测

线下活动|手机论坛|摄影论坛|硬件论坛|笔记本论坛|摄影作品精选

更多

浓情港风

今天做个酷女孩

圣诞小美妞

当女友穿上汉服后

八月·漫游

女人都想拍的绝色

夏日里的小天使

青春的气息

优派LX700-4K众测招募

优派VX2758-2K-PRO-8显示器免费试用

全国行情

广州上海深圳西安成都石家庄福州沈阳郑州武汉太原济南 合肥长沙南京云南重庆吉林新疆浙江兰州

40城市

全国

全国:

全国

东北华北:

北京

天津

沈阳

长春

哈尔滨

石家庄

太原

华东华北:

上海

宁波

南京

青岛

厦门

安庆

南昌

华南地区:

广州长沙南宁

中西部:

西安

成都

重庆

郑州

兰州

武汉

昆明

呼和浩特

乌鲁木齐

全国渠道代理:

西安站|成都站|河北站|山西站|云南站|更多

代理招募热线:

王女士 13701229325

公司简介 |

招聘信息 |

媒体合作 |

品牌大全 |

联系方式 |

营销推广 |

营销案例 |

产品入库 |

网商通 |

帐号注册 |

反馈纠错 |

网站地图 |

法律声明 |

微信关注 |

微博关注 |

头条关注

Copyright ©1999-2024 北京知行锐景科技有限公司 版权所有 北京市朝阳区奥运村街道北苑路28号院1号楼2层

京B2-20200543

京ICP备14061128号

京公网安备11010102005711号

(京)网药械信息备字(2022)第00054号

京演(机构) (2022) 5175号

广播电视节目制作经营许可证号(京)字第08010号

网站经营者信息公示

经营者履行社会责任公示信息

未成年人家长监护

风险监测

违法和不良信息举报电话:010-64218167

举报邮箱:jubao@zol.com.cn

客户端下载

关注公众号