JDK 21:GC 不断改进,性能更上一层楼

Java JDK版本全攻略:从JDK 8到JDK 21,一次性把版本升级讲清楚 Java版本演进与升级指南 摘要: 本文系统分析了Java版本演进历程,重点对比了JDK 8/17/21三个LTS版本。数据显示,JDK 17在GC暂停时间、启动速度和内存占用等方面较JDK 8有显著提升(50-100倍GC改进,30%+启动优化)。JDK 21更引入了虚拟线程等革命性特性。文章建议企业尽快从JDK 8升级,并详细说明了JDK 17的新特性(密封类、模式匹配等语言增强,伪随机数、Vector API等核心库升级)及升级注意事项。当前JDK 17是主流LTS选择,而JDK 21则代表未来方向。 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

c42418c58c83b0246c2a82ee248331b5.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:kstefanj.github.io/2023/
12/13/jdk-21-the-gcs-keep-
getting-better.html

18df6a8ac2ff30dfdc16fe022794331a.jpeg


随着 2023 年秋季发布的 JDK 21,现在有一个新的 LTS 版本可以进行基准测试并生成一些 GC 性能图表。JDK 21 和自 JDK 17 以来的其他版本提供了一系列值得注意的功能,如虚拟线程、用于switch 的模式匹配和分代 ZGC。让我们看看它的表现如何。

简介

当在不同的 JDK 版本之间进行性能比较时,很难确定哪些功能带来了某种性能提升。但很容易看出,自 JDK 8 以来,整个 Java 平台在性能上已经显著提升。在这篇文章中,我使用 SPECjbb® 20151 来展示性能的提升。这是一个众所周知的标准基准测试,非常适合展示对GC的改进。这主要是因为该基准测试提供了两个得分:

  • max-jOPS :原始吞吐量

  • critical-jOPS :在延迟约束下的吞吐量

GC 的改进将同时提高这两个得分,但对于受延迟约束的得分的改进更加与 GC 的改变密切相关。基本上,较短的暂停将获得更好的得分。对于原始吞吐量得分来说,JIT 和 Java 平台的其他部分的改进也起到了作用。

在基准测试时没有进行太多调优,但我设置了一个固定的堆大小为 16 GB,并启用了大页,并确保在运行基准测试之前将它们分页。我希望结果能够反映出即插即用的行为,但是像这样的配置可以获得公平一致的结果。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

选择 GC

Oracle 支持 4 种不同的 GC,它们都有不同的用途。在这篇文章中,我不包括 Serial GC,因为它不适用于我使用的基准测试。Serial GC 的主要重点是低开销,主要适用于内存和 CPU 资源有限的用例。在这次比较中,我们将重点介绍以下 GC:

  • G1 :自JDK 9起的默认收集器,注重延迟和吞吐量之间的平衡

  • Parallel :以吞吐量为导向的收集器,可能会出现较长的最坏情况延迟

  • Z :超低延迟的替代方案,完全并发,暂停时间在毫秒级别以下

使用哪种 GC 取决于应用程序最关注的方面。每种 GC 都有最佳的替代方案,并且没有一种 GC 可以在所有用例中都表现最佳。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

进展

如果回顾 JDK 8 以来的进展,G1 和 Parallel 的改进在各个方面都是相当惊人的。这两个收集器在各个方面都有所改进。它们的暂停时间更短,使用的内存更少,吞吐量比以往任何时候都要好。ZGC 的时间没有那么长,并且在这篇文章中,我主要关注通过使 ZGC 成为分代收集器带来的改进。

本文中的图表分别比较了不同的收集器。主要原因是根据堆大小的配置,结果对于某个收集器更有利。通过这样做,我们可以关注所有 GC 的巨大进步,而不是试图给出最佳的 GC。

比较包括 JDK 8、JDK 17 和 JDK 21 的 G1 和 Parallel。对于 ZGC,我选择的三个数据点是 JDK 17、JDK 21 和 JDK 21 中的分代 ZGC。由于 JDK 17 是 ZGC 完全支持的第一个 LTS 版本,所以回顾更早的版本并没有太多意义。

吞吐量

就原始吞吐量性能而言,与 JDK 17 相比,自 JDK 17 以来的改进并不是很大,但仍有轻微增加。但是,在下面的图表中,有两件事情真正值得关注。首先,JDK 8 和最新 JDK 之间的显著差异对于G1和Parallel来说。从性能的角度来看,离开 JDK 8 从来没有比现在更有益。

3418f6481c0a7540cf768af46898d1e4.png

第二个值得注意的是使用分代 ZGC 时看到了有 10% 的提升。ZGC 中的新分代支持使其能够更高效地回收内存,不需要考虑整个堆的每个 GC。其效果是在执行 GC 工作时消耗的 CPU 资源更少,这些资源可以用于应用程序,从而提高其性能。

延迟

对于延迟得分,情况基本上是一样的。G1 和 Parallel 在 JDK 8 和 JDK 17 之间取得了巨大的进展,但最佳结果仍然是在 JDK 21。值得注意的是,在 JDK 8 和 JDK 17 之间进行了超过 7 年的创新,而在 JDK 17 和 21 之间,只有两年。相比之下,较短的时间及 GC 的成熟,使得在这样大型基准测试中很看到显著的进展。

ae415e00cf13b303f76d0d062f4f31c9.png

将分代引入 ZGC 仍然可以看到在分代 ZGC 和传统模式之间的显著差异,这非常好。值得注意的是,大部分的改进来自于吞吐量得分的提高。这两种 ZGC 模式之间的暂停时间差异不大,它们都远低于 1 毫秒。然而,当考虑最坏情况的延迟时,与传统模式相比,分代 ZGC 相比之下显得更好一些。

a470fb696bfcd309ec17174dcf3cec96.png

对于 G1 和 Parallel,暂停时间并没有发生大的变化。我们在G1上花费了更多时间,在这里,通过查看更高百分位的暂停,我们可以看到我们已经成功地减少了几毫秒的时间。

内存开销

最后一个图表比较了在固定负载下运行基准测试时的峰值本机内存开销。就这个角度来看,Parallel 非常稳定,我们没有花费任何时间来进一步优化它。另一方面,对于 G1,我们在过去的十年中已经成功地消除了许多低效性,并且在 JDK 20 中,我们将 G1 改为只需要一个标记位图而不是两个。由此节省下来的资源是显著的,在这个基准测试中,G1 现在是最节省内存的收集器。

5bc74ec509845e04fbc38ed4b397a927.png

对于分代 ZGC,我们可以清楚地看到为了在这个基准测试中获得更好的延迟和吞吐量而做出的权衡。代价是更高的本机内存消耗。为了有效地实现分代支持,我们需要跟踪从老年代到新生代的指针。这称为记忆集,并且它们占用内存。在处理多个代时,我们还需要一些其他元数据所需的内存。尽管如此,在大多数情况下,与传统 ZGC 相比,使用分代 ZGC 时总体内存消耗更低,因为它不需要处理给定工作负载所需的堆的大小。因此,额外的本机内存使用通常可以通过使用较小的堆来节省,并且仍然可以获得更好的整体性能。

升级并尝试分代 ZGC

就像上面看到的那样,与 JDK 8 相比,JDK 21 的性能显著提高。因此,如果你还在使用 JDK 8,应该开始考虑升级。在升级时,同时重新评估要使用的 GC 也是一个很好的时机。如果迁移到 JDK 21,我强烈建议尝试使用分代 ZGC。在 JDK 21 中, ZGC 有分代版本和传统模式都可用,要使用分代版本,需要指定下面两个选项:

-XX:+UseZGC -XX:+ZGenerational

欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

d11646b5d779d552a9dcfb0b70339925.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

a4d45b0345376d4fc6143a72d9bfb0e7.png

0d62f573530d777b254d9f2b19693ba2.png80356fff43bffa4dab6d6dff4f55959e.png26bbffc8eb5e439d683de97e8318fb69.png7a114bd423d5e477d37e8697478e2190.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
JDK 21 分代式ZGC深度解析 JDK 21的分代式ZGC通过代际划分,实现了亚毫秒级GC暂停与吞吐量翻倍的双重突破。在实测中,某物流系统升级后GC时间减少89%,同时节省了30%的云主机成本。在微服务、实时交易等场景优先启用分代式ZGC配合Micrometer监控GC指标关注ZGC官方路线图(预计2024年成为默认GC)随着Spring Boot 3.2、Quarkus 3.5等框架全面支持JDK 21,现在正是优化Java应用性能的黄金窗口期。附录ZGC官方调优指南。 阅读详情

相关推荐

ruoyi框架 3.8.7 版本,升级到jdk21 springboot 3.2.5 初步测试可以运行通过

ruoyi框架 3.8.7 版本,升级到jdk21 springboot 3.2.5 初步测试可以运行通过。

趣谈虚拟线程,用JDK21的虚拟线程大幅度提升程序性能

在下面的例子里,在函数a() 运行到第4行的时候,需要等待一个比较耗时的IO操作,这时候我们将流程切走,运行b()函数,等b()运行到第12行的以后,再切回第6行进行,这样就可以交替运行提高性能,也保持了同步开发的模式,减轻了开发者的心智负担。这种方案在程序需要IO等待的时候,将流程切走,等IO操作完成后,再切回来继续操作,有很多高效而成功的例子,比如nginx。另一种方案就是大家常用的线程模式,我们用线程池来处理大量的请求,线程模式的好处,每个线程的处理是同步的,不存在复杂的烧脑回调,对程序员友好。

xinyebudaoshi的博客 1816

关于光耦隔离与SP3485E芯片一起使用无法拉高485使能引脚问题

最近在做的一个项目,定制了一块STM32F407ZG的工控板,工控板载4个485接口全部都是只能接收数据,不能对外发送数据。1.接线不正确:接线不正确导致485收发出现问题。 2.程序端口初始化问题:控制光耦隔离的输入脚IO的初始化和置位状态有问题。 3.GPIO复用问题:控制对应串口的GPIO不是正点原子默认的GPIO,而是经过复用的其他IO,复用问题。 4.程序设置与485E芯片收发模式不对应:对于使能引脚的电平要根据光耦的输出情况确定输入IO与RE的关系,可能模式没有对应。 5.光耦隔离或者SP485

weixin_45862642的博客 2978

从慢到快:如何用JDK 21虚拟线程重塑性能极限

从慢到快:如何用JDK 21虚拟线程重塑性能极限

weixin_48278764的博客 1808

从零构建:基于Docker与FRR的OSPF虚拟网络实验室

本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。

plum99的博客 222

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标

PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值)

wewil_lwin的博客 3235

Java JDK 21的全新特性解析:深入挖掘开发者的利器

在本篇博客中,我们将以默语博主的身份为您详细介绍 Java JDK 21 的全新特性。这些特性将帮助开发者更轻松、更高效地编写 Java 应用程序,让您的开发之旅更加愉快。我们将深入挖掘这些新功能,为您提供实用的代码示例和深入分析,助您快速上手并提高开发效率。让我们一起来探索这些令人振奋的变化吧!Java JDK 21 带来了许多令人兴奋的变化,从性能提升到语言功能增强,再到开发工具的改进。这些新特性将帮助开发者更轻松地构建高效、可维护的 Java 应用程序。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 506

「深度学习之优化算法」笔记(二)优化算法的分类

但是由于生物的局限性,人们所创造出的算法也会有局限性:我们所熟知的生物都生存在三维空间,在这些环境中,影响生物生存的条件比较有限,反应到算法中就是这些算法在解决较低维度的问题时效果很好,当遇到超高维(维度>500)问题时,结果可能不容乐观,没做过实验,我也不敢乱说。当然,他们的目的不是在最佳狩猎位置集合,他们的目的是在过去的途中看是否能发现更加好的狩猎位置,去往已经到过的狩猎地点再次狩猎是没有意义的,因为每个位置获取食物的难易程度是固定的。如果他们的策略是“不跟随最优解”,那么他们的策略是什么呢?

quanzhan_King的博客 1371

Java 21革命性升级:探索分代ZGC的性能奇迹

本文将带您深入研究Java 21中的一项颠覆性特性——分代ZGC(Generational ZGC)。我们将详细解释这个垃圾回收引擎的原理、设计理念以及在性能优化方面的显著改进。通过对比传统垃圾回收方法,读者将更好地理解分代ZGC如何提供更快、更稳定的内存管理体验。无论您是Java开发者、系统架构师还是对Java最新技术的追随者,本文将为您揭示分代ZGC的魅力,助您在Java编程的道路上更进一步。让我们一同迎接Java 21崭新时代的到来!

学而时习之,不亦说乎?温故而知新,可以为师矣! 2131

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1547

【MATLAB例程】基于TDOA定位(两步最小二乘)的三维轨迹定位和UKF滤波,TDOA的锚点可以自适应,附完整代码

该代码实现了一种**融合TDOA(到达时间差)定位与无迹卡尔曼滤波(UKF)**的动态目标轨迹跟踪方案,适用于三维空间中的移动目标定位与滤波。TDOA定位:通过两步加权最小二乘法(TS-WLS)解算目标位置。UKF滤波:对定位结果进行非线性滤波,抑制噪声并提升轨迹平滑性。多维度误差分析:对比滤波前后误差,评估算法性能。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 676

垃圾回收器优化:JDK 17 与 JDK 21 如何调整 GC 算法以提升应用性能?

垃圾回收器优化:JDK 17 与 JDK 21 如何调整 GC 算法以提升应用性能? JDK 17 和 JDK 21 在垃圾回收器(GC)上有什么优化?如何,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都具备丰富经验。我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用方法、前沿科技资讯、产品评测、产品使用体验,以及产品优缺点分析、横向对比、技术沙龙参会体验等。我的分享聚焦于云服务产品评测、AI产品对比、开发板性能测试和技术报告。目前,我活跃在。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 2078

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

联想E14Win10专业版。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 8053

JDK 17 和 JDK 21 在垃圾回收器(GC)上有什么优化?如何调整 GC 算法以提升应用性能?

本文将从 JDK 17 与 JDK 21 的垃圾回收改进出发,结合代码示例解析优化方案,并提供实际项目中的调优策略,帮助你提升应用性能。-XX:ShenandoahGCHeuristics=<策略> # 设置启发式策略(如 compact、static 等)-Xlog:gc*:file=gc.log:time,uptime,level,tags # 输出到文件。-XX:+UseShenandoahGC # 启用 Shenandoah GC。// 模拟分配大对象。

m0_37843156的博客 1411

L2CAP 面向连接信道(CoC)在 BLE 中的应用:建立、流控与数据传输

L2CAP(逻辑链路控制与适配协议)是蓝牙协议栈中的核心层,位于基带层之上,为上层协议提供数据传输服务。在低功耗蓝牙(BLE)中,L2CAP面向连接信道(Connection-Oriented Channel, CoC) 是实现可靠数据传输的关键机制,广泛应用于健康监测、智能家居、工业控制等领域。

byte轻骑兵的技术小窝 3637

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA面试题分享三百七十八:JDK 21:GC变得越来越好了

当比较 JDK 版本之间的性能时,很难准确地说出哪些功能带来了某种性能提升。但是很容易看出自 JDK 8 以来,Java 平台整体的性能显著提高。在本文中,我将使用 SPECjbb®2015 来展示性能增益。这是一个众所周知的标准基准测试,非常适合展示 GC 的变化。max-jOPS- 原始吞吐量- 在延迟约束下的吞吐量GC 的改进将提高这两个得分,但限制延迟得分的改进更与 GC 的变化相关。基本上,较短的暂停将给出更好的得分。对于原始吞吐量得分,JIT 和 Java 平台的其他部分的改进也起到作用。

之乎者也·的博客 1489

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【后端】【JAVA】JDK 21与JDK 7 JVM结构及GC算法深度解析:从永久代到元空间,从CMS到ZGC的演进

本文解析JDK 7至JDK 21 JVM演进:JDK 7永久代(PermGen)易致OOM,GC暂停长(100-500ms);JDK 21移除PermGen,元空间自动扩展避免溢出;GC默认G1(平衡吞吐),ZGC实现<10ms超低延迟。通过对比表格、ZGC着色指针源码及配置示例(如-XX:+UseZGC -XX:MaxGCPauseMillis=10),指导开发者:G1适配多数场景,ZGC专攻实时交易系统,显著提升应用性能与稳定性。

xiezhiyi007的专栏 1036

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java性能飞跃的秘密:JDK 21中被忽视的3个GC优化

掌握Java性能优化关键,深入解读JDK 21新特性中三大被忽视的GC改进。适用于高并发、低延迟场景,提升应用吞吐量与响应速度。了解ZGC和Shenandoah优化细节,实现更高效的内存管理,值得收藏。

BreakVein的博客 623

JDK21垃圾回收器介绍与选择

JDK 21 中提供了多种垃圾回收器(Garbage Collector, GC),每种都有其适用场景和优化目标。

专注于优雅与性能的未来架构师 2190

JDK 17与JDK 21全面对比:新特性、性能差异与升级指南

技术债清理:若项目仍在使用JDK 11,建议直接迁移至JDK 21混合部署方案:# 使用jlink创建模块化运行时 jlink --add-modules java.base --output jre-minimal最终建议金融/医疗等保守领域:JDK 17 + 分阶段验证JDK 21互联网/云原生:优先采用JDK 21获取虚拟线程优势🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!

ztt123654的博客 4750

Java8真的变老!JDK21时代到了。看看朴朴660 个项目从 JDK8 到 JDK21 的零故障升级之路

Java8真的变老!JDK21时代到了。看看朴朴660 个项目从 JDK8 到 JDK21 的零故障升级之路

架构师尼恩 2416

JDK 8 与 JDK 21的比较,是否值得升级

Java作为一门经典的编程语言,其JDK(Java Development Kit)的更新一直备受开发者关注。从JDK 8到JDK 21,Java经历了多次重大更新,引入了许多新特性和改进。本文将从几个关键方面对比JDK 21和JDK 8,帮助大家快速了解这些变化。

云淡风轻 3410

JDK 21 简介

Java Development Kit 21(JDK 21)于2023年9月19日发布,作为长期支持版本(LTS),Oracle承诺提供至少8年的技术支持。JDK 21引入了多项重要新特性,包括虚拟线程(Virtual Threads)、分代ZGC(Generational ZGC)、模式匹配for switch(Pattern Matching in switch)、字符串模板(String Templates)等。虚拟线程显著提升了高并发场景下的性能,分代ZGC优化了大堆内存的垃圾回收效率,模式匹配增

红血哥 1103

从 JDK 8 到 JDK 21:企业级 Java 升级避坑指南

Java 8 到 21 的升级是企业级应用不可回避的技术趋势,但面临兼容性、性能和安全等多重挑战。本文系统梳理了从 JDK 8 迁移至 JDK 21 的关键变更,包括语言特性(如 record、var)、JVM 机制(GC 算法、模块化系统)等核心差异,并针对典型兼容性问题(如反射警告、类加载失败)提供解决方案。同时提出分阶段的企业级升级路线图,涵盖评估准备、测试验证到灰度发布的完整流程,帮助技术团队规避升级风险,充分发挥 JDK 21 在性能、开发效率和云原生支持方面的优势。

刘一说的IT专栏 2722
上一篇: 8种专坑同事 SQL写法,性能降低100倍,不来看看?
下一篇: 程序员为保饭碗,开始”防御性编程”...
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值