ZGC:Java低延迟垃圾回收器解析

💡亲爱的技术伙伴们:

你是否正被这些问题困扰——

  • ✔️ 投递无数简历却鲜有回音?
  • ✔️ 技术实力过硬却屡次折戟终面?
  • ✔️ 向往大厂却摸不透考核标准?

我打磨的《 Java高级开发岗面试急救包》正式上线!

  • ✨ 学完后可以直接立即以此经验找到更好的工作
  • ✨ 从全方面地掌握高级开发面试遇到的各种疑难问题
  • ✨ 能写出有竞争力的简历,通过模拟面试提升面试者的面试水平
  • ✨ 对自己的知识盲点进行一次系统扫盲

🎯 特别适合:

  • 📙急需跳槽的在校生、毕业生、Java初学者、Java初级开发、Java中级开发、Java高级开发
  • 📙非科班转行需要建立面试自信的开发者
  • 📙想系统性梳理知识体系的职场新人

课程链接:https://edu.youkuaiyun.com/course/detail/40731课程介绍如下:

Java程序员廖志伟Java程序员廖志伟

优快云Java程序员廖志伟

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

Java程序员廖志伟

🍊 JVM核心知识点之ZGC:ZGC简介

在当今大数据和云计算时代,Java虚拟机(JVM)作为Java应用程序的运行环境,其性能和稳定性至关重要。然而,随着应用程序规模的不断扩大,传统的垃圾回收机制在处理大量数据时往往显得力不从心。特别是在内存密集型应用中,频繁的垃圾回收会导致系统性能下降,甚至出现内存溢出错误。为了解决这一问题,ZGC(Z Garbage Collector)应运而生。

ZGC,全称为Z Garbage Collector,是JVM中的一种新型垃圾回收器。它旨在为大型Java应用程序提供低延迟和高吞吐量的垃圾回收性能。在传统的垃圾回收机制中,垃圾回收器通常需要暂停应用程序的执行,即所谓的“Stop-The-World”事件。而ZGC通过一系列创新技术,实现了在应用程序运行过程中几乎不暂停的垃圾回收,从而极大地提高了系统的响应速度和稳定性。

ZGC的背景源于对现有垃圾回收技术的反思。在传统的垃圾回收器中,如G1和CMS,虽然已经对Stop-The-World事件进行了优化,但在处理大量数据时,仍然存在明显的性能瓶颈。ZGC的诞生,正是为了解决这一问题,通过引入新的算法和机制,实现了更高效的垃圾回收。

ZGC的目标是提供一种低延迟的垃圾回收方案,以满足现代大型Java应用程序的需求。具体来说,ZGC的目标包括:

  1. 减少Stop-The-World事件的持续时间,使得应用程序在垃圾回收期间几乎不受影响。
  2. 提高垃圾回收的效率,减少内存碎片,提高内存利用率。
  3. 支持多核处理器,充分利用现代硬件资源,提高垃圾回收的并行度。

接下来,我们将详细介绍ZGC的背景和目标,帮助读者深入理解ZGC的设计理念和工作原理。这将有助于读者在开发大型Java应用程序时,更好地利用ZGC的优势,提高系统的性能和稳定性。

ZGC的背景

ZGC(Z Garbage Collector)是Java虚拟机(JVM)中的一种新型垃圾回收器,旨在为大型Java应用提供低延迟的垃圾回收。ZGC的诞生并非偶然,而是JVM发展历程中垃圾回收技术不断演进的结果。

JVM发展历程

自Java语言诞生以来,JVM经历了多个版本的发展。早期的JVM主要采用串行垃圾回收器,如Serial GC,它适用于单核CPU环境,但无法满足多核CPU环境下对垃圾回收性能的需求。随后,JVM引入了并行垃圾回收器,如Parallel GC,它通过多线程并行回收垃圾,提高了垃圾回收效率。然而,Parallel GC在处理大量对象时,仍然存在较大的延迟。

垃圾回收技术演进

随着Java应用的不断发展和对性能要求的提高,垃圾回收技术也在不断演进。从串行GC到并行GC,再到后来的CMS(Concurrent Mark Sweep)GC和G1(Garbage-First)GC,垃圾回收技术逐渐从单线程向多线程、从串行向并发方向发展。

ZGC设计目标

ZGC的设计目标是实现低延迟的垃圾回收,以满足大型Java应用对性能的需求。具体来说,ZGC具有以下设计目标:

  1. 垃圾回收延迟小于10毫秒;
  2. 垃圾回收暂停时间小于1毫秒;
  3. 支持多核CPU环境;
  4. 兼容现有的Java应用。

ZGC与G1GC对比

ZGC与G1GC都是针对大型Java应用设计的低延迟垃圾回收器,但它们在实现方式和性能上存在一些差异:

  1. ZGC采用纯内存分配策略,而G1GC采用混合内存分配策略;
  2. ZGC的垃圾回收延迟更低,但内存占用略高于G1GC;
  3. ZGC对内存碎片敏感,而G1GC对内存碎片不敏感。

ZGC适用场景

ZGC适用于以下场景:

  1. 大型Java应用,如Web服务器、大数据处理等;
  2. 对性能要求较高的应用,如实时系统、金融系统等;
  3. 需要低延迟垃圾回收的应用。

ZGC性能优势

ZGC具有以下性能优势:

  1. 低延迟:垃圾回收延迟小于10毫秒,满足大型Java应用对性能的需求;
  2. 高吞吐量:在保证低延迟的同时,ZGC具有较高的吞吐量;
  3. 兼容性:ZGC兼容现有的Java应用,无需修改代码。

ZGC实现原理

ZGC采用以下实现原理:

  1. 纯内存分配策略:ZGC采用纯内存分配策略,避免了内存碎片问题;
  2. 并发标记:ZGC在垃圾回收过程中,采用并发标记的方式,降低垃圾回收对应用性能的影响;
  3. 并发清理:ZGC在垃圾回收过程中,采用并发清理的方式,进一步提高垃圾回收效率。

ZGC内存分配策略

ZGC采用以下内存分配策略:

  1. 分区:ZGC将内存划分为多个区域,每个区域负责分配一定数量的对象;
  2. 分配:ZGC在分配对象时,优先选择空闲区域,避免内存碎片;
  3. 回收:ZGC在回收对象时,优先回收空闲区域,提高垃圾回收效率。

ZGC与操作系统交互

ZGC与操作系统交互主要体现在以下几个方面:

  1. 内存分配:ZGC通过操作系统分配内存,以满足垃圾回收的需求;
  2. 内存回收:ZGC通过操作系统回收内存,释放不再使用的对象;
  3. 内存压缩:ZGC在垃圾回收过程中,通过内存压缩技术,提高内存利用率。
比较项目 ZGC JVM发展历程 垃圾回收技术演进 ZGC设计目标 ZGC与G1GC对比 ZGC适用场景 ZGC性能优势 ZGC实现原理 ZGC内存分配策略 ZGC与操作系统交互
垃圾回收器类型 新型垃圾回收器 早期串行GC,并行GC,CMS GC,G1 GC 从串行到并发,从单线程到多线程 低延迟垃圾回收器 低延迟垃圾回收器
设计背景 针对大型Java应用提供低延迟的垃圾回收 JVM发展历程,串行GC,并行GC 垃圾回收技术不断演进 实现低延迟的垃圾回收 针对大型Java应用设计 大型Java应用,高性能应用,低延迟需求应用 低延迟,高吞吐量,兼容性 纯内存分配策略,并发标记,并发清理 分区,分配,回收 内存分配,内存回收,内存压缩
早期JVM垃圾回收器 Serial GC 串行GC
多线程垃圾回收器 Parallel GC 并行GC
并发垃圾回收器 ZGC CMS GC 并发标记清除GC G1 GC
垃圾回收延迟 <10毫秒 1. 垃圾回收延迟小于10毫秒 ZGC的垃圾回收延迟更低 大型Java应用,高性能应用,低延迟需求应用 低延迟
垃圾回收暂停时间 <1毫秒 2. 垃圾回收暂停时间小于1毫秒
内存分配策略 纯内存分配策略 3. 支持多核CPU环境 ZGC采用纯内存分配策略
内存占用 略高于G1GC 4. 兼容现有的Java应用 ZGC的内存占用略高于G1GC
内存碎片敏感度 对内存碎片敏感 ZGC对内存碎片敏感
适用场景 大型Java应用,高性能应用,低延迟需求应用
性能优势 低延迟,高吞吐量,兼容性
实现原理 纯内存分配策略,并发标记,并发清理
内存分配策略细节 分区,分配,回收
操作系统交互 内存分配,内存回收,内存压缩

ZGC的设计理念源于对大型Java应用低延迟垃圾回收的迫切需求。在JVM发展历程中,从早期的串行GC到并行GC,再到并发垃圾回收器如CMS GC和G1 GC,垃圾回收技术不断演进,旨在提高性能和降低延迟。ZGC作为新型垃圾回收器,其核心目标是实现低于10毫秒的垃圾回收延迟和低于1毫秒的垃圾回收暂停时间,以满足大型Java应用、高性能应用以及低延迟需求应用的需求。ZGC采用纯内存分配策略,通过并发标记和并发清理技术,有效降低了垃圾回收的延迟,同时保持了高吞吐量和良好的兼容性。然而,ZGC对内存碎片较为敏感,其内存占用略高于G1GC,但这一牺牲在低延迟和高性能方面得到了充分的补偿。

ZGC的目标

ZGC(Z Garbage Collector)是Java虚拟机(JVM)中的一种垃圾回收器,旨在解决大型Java应用在内存分配和垃圾回收方面的性能瓶颈。ZGC的目标可以概括为以下几个方面:

  1. 降低停顿时间:ZGC的核心目标是实现低延迟的垃圾回收,将垃圾回收的停顿时间控制在毫秒级别。这对于需要高响应性的应用,如在线交易系统、实时数据处理等,尤为重要。

  2. 减少内存碎片:ZGC采用了一种称为“并发标记清除”的垃圾回收算法,可以有效减少内存碎片,提高内存利用率。这对于需要频繁进行内存分配和释放的应用来说,具有显著优势。

  3. 提高吞吐量:ZGC通过优化内存分配和垃圾回收过程,提高JVM的吞吐量。这对于需要处理大量并发请求的应用,如Web服务器、大数据处理等,具有重要意义。

  4. 兼容性:ZGC与JVM的其他组件具有良好的兼容性,如类加载器、线程管理等。这使得ZGC可以无缝地集成到现有的Java应用中。

  5. 可扩展性:ZGC支持动态调整垃圾回收参数,以适应不同应用场景的需求。这使得ZGC具有较好的可扩展性。

具体来说,ZGC的目标可以从以下几个方面进行阐述:

  • 内存分配策略:ZGC采用了一种称为“并发标记清除”的垃圾回收算法,通过在垃圾回收过程中暂停所有用户线程,实现内存的标记和清除。这种算法可以有效减少内存碎片,提高内存利用率。

  • 垃圾回收算法:ZGC采用了一种称为“并发标记清除”的垃圾回收算法,通过在垃圾回收过程中暂停所有用户线程,实现内存的标记和清除。这种算法可以有效减少内存碎片,提高内存利用率。

  • 并发控制机制:ZGC采用了一种称为“并发标记清除”的垃圾回收算法,通过在垃圾回收过程中暂停所有用户线程,实现内存的标记和清除。这种算法可以有效减少内存碎片,提高内存利用率。

  • 性能优化目标:ZGC的目标是实现低延迟的垃圾回收,将垃圾回收的停顿时间控制在毫秒级别。这对于需要高响应性的应用,如在线交易系统、实时数据处理等,尤为重要。

  • 资源消耗分析:ZGC在运行过程中,对CPU和内存资源的消耗相对较低。这使得ZGC适用于资源受限的环境。

  • 适用场景:ZGC适用于需要低延迟、高吞吐量的Java应用,如在线交易系统、实时数据处理等。

  • 与其他垃圾回收器的比较:与传统的垃圾回收器相比,ZGC具有更低的停顿时间、更少的内存碎片和更高的吞吐量。

  • 与JVM其他组件的兼容性:ZGC与JVM的其他组件具有良好的兼容性,如类加载器、线程管理等。

  • 调优建议:为了充分发挥ZGC的性能,建议在应用启动时设置合适的垃圾回收参数,如堆内存大小、垃圾回收器线程数等。同时,关注JVM的运行日志,及时发现问题并进行优化。

目标描述 具体内容
降低停顿时间 将垃圾回收的停顿时间控制在毫秒级别,适用于需要高响应性的应用,如在线交易系统、实时数据处理等
减少内存碎片 采用“并发标记清除”算法,有效减少内存碎片,提高内存利用率,对频繁进行内存分配和释放的应用有优势
提高吞吐量 优化内存分配和垃圾回收过程,提高JVM的吞吐量,对处理大量并发请求的应用如Web服务器、大数据处理等有重要意义
兼容性 与JVM的其他组件如类加载器、线程管理等具有良好的兼容性,可无缝集成到现有Java应用中
可扩展性 支持动态调整垃圾回收参数,适应不同应用场景的需求,具有较好的可扩展性
内存分配策略 采用“并发标记清除”算法,在垃圾回收过程中暂停所有用户线程,实现内存的标记和清除
垃圾回收算法 采用“并发标记清除”算法,有效减少内存碎片,提高内存利用率
并发控制机制 通过暂停所有用户线程实现内存的标记和清除,减少内存碎片
性能优化目标 实现低延迟的垃圾回收,将垃圾回收的停顿时间控制在毫秒级别
资源消耗分析 运行过程中对CPU和内存资源的消耗相对较低,适用于资源受限的环境
适用场景 适用于需要低延迟、高吞吐量的Java应用,如在线交易系统、实时数据处理等
与其他垃圾回收器的比较 与传统垃圾回收器相比,具有更低的停顿时间、更少的内存碎片和更高的吞吐量
与JVM其他组件的兼容性 与JVM的其他组件如类加载器、线程管理等具有良好的兼容性
调优建议 设置合适的垃圾回收参数,如堆内存大小、垃圾回收器线程数等,关注JVM的运行日志,及时发现问题并进行优化

在实际应用中,该垃圾回收器通过精细化的内存分配策略,确保了在处理大量数据时,内存的分配和回收能够高效进行,从而显著提升了系统的整体性能。特别是在对实时性要求极高的场景中,如金融交易系统,这种低停顿时间的特性显得尤为重要,因为它可以确保交易处理的连续性和准确性,避免因垃圾回收导致的延迟而影响用户体验。此外,其与JVM其他组件的兼容性,使得它能够无缝集成到现有的Java应用中,为开发者提供了极大的便利。

🍊 JVM核心知识点之ZGC:ZGC的工作原理

在当今大数据和云计算时代,Java虚拟机(JVM)的性能直接影响着应用系统的稳定性和效率。ZGC(Z Garbage Collector)作为JVM中的一种新型垃圾回收器,因其低延迟和高吞吐量特性,在内存密集型应用中得到了广泛应用。然而,在实际应用中,许多开发人员对ZGC的工作原理缺乏深入了解,导致无法充分利用其优势。本文将深入探讨ZGC的工作原理,以帮助读者更好地理解和应用这一JVM核心知识点。

ZGC作为一种低延迟的垃圾回收器,其设计目标是减少垃圾回收带来的停顿时间,以满足对实时性要求较高的应用场景。在介绍ZGC的工作原理之前,我们先来设想一个场景:在一个大型分布式系统中,由于内存泄漏和未及时回收无用对象,导致系统频繁出现内存溢出错误,严重影响了系统的稳定性和用户体验。为了解决这个问题,引入ZGC成为了一种可行的方案。

ZGC的工作原理主要涉及以下几个方面:

  1. 内存分配:ZGC采用了一种名为“Region”的内存分配单元,将堆内存划分为多个大小相等的区域。这种设计使得内存分配更加高效,同时简化了垃圾回收过程。

  2. 垃圾回收:ZGC采用了一种名为“Concurrent Marking”的垃圾回收算法,通过并发标记存活对象,并快速回收死亡对象。这种算法在保证垃圾回收效率的同时,最大限度地减少了停顿时间。

  3. 并发控制:ZGC通过引入“并发控制”机制,实现了在应用程序运行过程中,垃圾回收线程与用户线程的协同工作。这种机制使得ZGC在低延迟的同时,保证了垃圾回收的准确性。

接下来,我们将分别对ZGC的内存分配、垃圾回收和并发控制进行详细介绍,帮助读者全面了解ZGC的工作原理。

首先,内存分配部分将阐述ZGC如何通过Region机制提高内存分配效率,以及Region在垃圾回收过程中的作用。其次,垃圾回收部分将深入剖析Concurrent Marking算法的原理,并介绍ZGC如何实现低延迟的垃圾回收。最后,并发控制部分将探讨ZGC如何实现用户线程与垃圾回收线程的协同工作,以及如何保证垃圾回收的准确性。

通过本文的介绍,读者将能够对ZGC的工作原理有一个全面的认识,从而在实际应用中更好地利用ZGC的优势,提高Java应用系统的性能和稳定性。

ZGC的内存分配策略

ZGC(Z Garbage Collector)是Java虚拟机(JVM)中的一种低延迟垃圾回收器。它通过一系列创新的内存分配策略,实现了在保证垃圾回收效率的同时,降低延迟。下面将详细介绍ZGC的内存分配策略。

内存区域划分

ZGC将内存划分为多个区域,包括年轻代、老年代和元空间。每个区域都有其特定的内存分配策略。

  1. 年轻代:ZGC将年轻代划分为多个大小相等的区域,称为“ZGC区域”。这些区域用于存储新生代对象。当新生代对象达到一定数量时,ZGC会触发一次垃圾回收,将存活的对象移动到老年代,同时回收死亡的对象。
public class ZGCRegion {
    private long startAddress;
    private long endAddress;
    private boolean isFull;

    public ZGCRegion(long startAddress, long endAddress) {
        this.startAddress = startAddress;
        this.endAddress = endAddress;
        this.isFull = false;
    }

    // ...其他方法...
}
  1. 老年代:老年代也划分为多个ZGC区域,用于存储长期存活的对象。老年代对象分配时,ZGC会优先选择空闲区域,如果空闲区域不足,则会触发垃圾回收。
public class ZGCOldRegion {
    private long startAddress;
    private long endAddress;
    private boolean isFull;

    public ZGCOldRegion(long startAddress, long endAddress) {
        this.startAddress = startAddress;
        this.endAddress = endAddress;
        this.isFull = false;
    }

    // ...其他方法...
}
  1. 元空间:元空间用于存储类信息、常量池等数据。ZGC对元空间的内存分配策略与其他区域类似。

内存分配算法

ZGC采用了一种称为“TLAB(Thread-Local Allocation Buffer)”的内存分配算法。TLAB是一种线程局部缓存,用于减少内存分配的开销。每个线程都有自己的TLAB,当线程需要分配内存时,首先尝试从TLAB中分配,如果TLAB不足,则从ZGC区域中分配。

public class TLAB {
    private long startAddress;
    private long endAddress;
    private boolean isFull;

    public TLAB(long startAddress, long endAddress) {
        this.startAddress = startAddress;
        this.endAddress = endAddress;
        this.isFull = false;
    }

    // ...其他方法...
}

内存分配器实现

ZGC的内存分配器由TLAB和ZGC区域组成。当线程需要分配内存时,首先尝试从TLAB中分配。如果TLAB不足,则从ZGC区域中分配。ZGC区域采用“空闲列表”策略,将空闲区域存储在一个列表中,以便快速查找。

public class ZGCHeap {
    private List<ZGCRegion> youngRegions;
    private List<ZGCOldRegion> oldRegions;
    private List<TLAB> tlabs;

    public ZGCHeap() {
        youngRegions = new ArrayList<>();
        oldRegions = new ArrayList<>();
        tlabs = new ArrayList<>();
    }

    // ...其他方法...
}

内存分配性能分析

ZGC的内存分配性能优于其他垃圾回收器。在低延迟场景下,ZGC的内存分配延迟仅为几十微秒。此外,ZGC的内存分配效率也较高,可以减少内存碎片。

内存碎片处理

ZGC通过“空闲列表”策略处理内存碎片。当ZGC区域不足时,它会触发垃圾回收,将存活的对象移动到其他区域,同时回收死亡的对象。这样可以减少内存碎片,提高内存利用率。

内存分配与垃圾回收的协同机制

ZGC的内存分配与垃圾回收紧密协同。当TLAB不足时,ZGC会触发垃圾回收,将存活的对象移动到其他区域,同时回收死亡的对象。这样可以保证内存分配的连续性,降低延迟。

内存分配对应用性能的影响

ZGC的内存分配策略对应用性能有积极影响。在低延迟场景下,ZGC可以显著提高应用性能。此外,ZGC的内存分配效率也较高,可以减少内存碎片,提高内存利用率。

ZGC内存分配的优化策略

ZGC的内存分配策略已经非常优秀,但仍有一些优化空间。例如,可以优化TLAB的分配策略,提高TLAB的利用率;还可以优化ZGC区域的分配策略,提高内存利用率。

ZGC内存分配与其他垃圾回收器的比较

与其他垃圾回收器相比,ZGC的内存分配策略具有以下优势:

  1. 低延迟:ZGC的内存分配延迟仅为几十微秒,远低于其他垃圾回收器。
  2. 高效率:ZGC的内存分配效率较高,可以减少内存碎片,提高内存利用率。
  3. 灵活性:ZGC的内存分配策略可以根据应用需求进行调整,提高应用性能。
内存分配策略方面 ZGC 特点 对比其他垃圾回收器
内存区域划分 年轻代:划分为多个ZGC区域,用于存储新生代对象。老年代:划分为多个ZGC区域,用于存储长期存活的对象。元空间:用于存储类信息、常量池等数据。 年轻代和老年代划分更细,有助于更高效地管理内存。元空间独立划分,有助于优化类加载和卸载。
内存分配算法 TLAB(Thread-Local Allocation Buffer):线程局部缓存,减少内存分配开销。 TLAB机制减少了线程间的内存竞争,提高了内存分配效率。
内存分配器实现 由TLAB和ZGC区域组成。TLAB不足时,从ZGC区域分配。ZGC区域采用“空闲列表”策略。 空闲列表策略提高了内存分配的效率,减少了内存碎片。
内存分配性能分析 低延迟:几十微秒。高效率:减少内存碎片,提高内存利用率。 性能优于其他垃圾回收器,尤其在低延迟场景下。
内存碎片处理 通过“空闲列表”策略处理内存碎片。触发垃圾回收,移动存活对象,回收死亡对象。 有效减少内存碎片,提高内存利用率。
内存分配与垃圾回收的协同机制 TLAB不足时触发垃圾回收,保证内存分配的连续性,降低延迟。 协同机制保证了内存分配的连续性,降低了延迟。
内存分配对应用性能的影响 提高应用性能,减少内存碎片,提高内存利用率。 对应用性能有积极影响,尤其在低延迟场景下。
ZGC内存分配的优化策略 优化TLAB分配策略,提高TLAB利用率;优化ZGC区域分配策略,提高内存利用率。 优化空间存在,可进一步提高性能。
ZGC内存分配与其他垃圾回收器的比较 低延迟、高效率、灵活性。 在延迟和效率方面具有明显优势,可根据需求调整策略。

ZGC的内存分配策略在处理大规模数据时展现出卓越的性能。其独特的内存区域划分,如将年轻代和老年代细分为多个区域,不仅提高了内存管理的效率,还优化了类加载和卸载过程。此外,ZGC的TLAB机制显著降低了线程间的内存竞争,从而提升了内存分配的效率。与传统的垃圾回收器相比,ZGC在处理内存碎片方面更为出色,其“空闲列表”策略有效减少了内存碎片,提高了内存利用率。这种协同机制不仅保证了内存分配的连续性,还降低了延迟,对应用性能产生了积极影响。

ZGC(Z Garbage Collector)是Java虚拟机(JVM)中的一种垃圾回收器,旨在提供低延迟和高吞吐量的垃圾回收性能。ZGC通过一系列创新的技术和算法,实现了对Java应用程序的快速响应和高效资源管理。

🎉 ZGC原理</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值