Java的垃圾回收机制详解和调优大全

Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题 在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和. 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 1.JVM的gc概述 gc即垃圾收集机制是指JVM用于释放那些不再使用的对象所占用的内存。Java语言并不要求JVM有gc,也没有规定gc如何工作。不过常用的JVM都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了避免垃圾收集中断,而大多数OLTP应用程序则注重整体效率。理解了应用程序的工作负荷和JVM支持的垃圾收集算法,便可以进行优化配置垃圾收集器。 垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。 1.1.引用计数 引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,JVM必须适当增减引用数。当某对象的引用数为0时,便可以进行垃圾收集。 1.2.对象引用遍历 早期的JVM使用引用计数,现在大多数JVM采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。 下一步,gc要删除不可到达的对象。删除时,有些gc只是简单的扫描堆栈,删除未标记的未标记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。这种方法的问题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。因此,许多gc可以重新组织内存中的对象,并进行压缩(compact),形成可利用的空间。 为此,gc需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有gc运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的gc不断增加或同时运行以减少或者清除应用程序的中断。有的gc使用单线程完成这项工作,有的则采用多线程以增加效率。 2.几种垃圾回收机制 2.1.标记-清除收集器 这种收集器首先遍历对象图并标记可到达的对象,然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。 2.2.标记-压缩收集器 有时也叫标记-清除-压缩收集器,与标记-清除收集器有相同的标记阶段。在第二阶段,则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。 2.3.复制收集器 这种收集器将堆栈分为两个域,常称为半空间。每次仅使用一半的空间,JVM生成的新对象则放在另一半空间中。gc运行时,它把可到达对象复制到另一半空间,从而压缩了堆栈。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。 2.4.增量收集器 增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。 2.5.分代收集器 这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。JVM生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。 2.6.并发收集器 并发收集器与应用程序同时运行。这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。 2.7.并行收集器 并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高Java应用程序的可扩展性。 3.Sun HotSpot 1.4.1 JVM堆大小的调整 Sun HotSpot 1.4.1使用分代收集器,它把堆分为三个主要的域:新域、旧域以及永久域。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。 在永久域中JVM则存储class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分。下面介绍如何控制这些域的大小。可使用-Xms和-Xmx 控制整个堆的原始大小或最大值。 下面的命令是把初始大小设置为128M: Java –Xms128m –Xmx256m为控制新域的大小,可使用-XX:NewRatio设置新域在堆中所占的比例。下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或32M: Java –Xms128m –Xmx128m –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize设置新域的初始值和最大值。 下面的命令把新域的初始值和最大值设置成64m: Java –Xms256m –Xmx256m –Xmn64m 永久域默认大小为4m。运行程序时,JVM会调整永久域的大小以满足需要。每次调整时,JVM会对堆进行一次完全的垃圾收集。 使用-XX:MaxPerSize标志来增加永久域搭大小。在WebLogic Server应用程序加载较多类时,经常需要增加永久域的最大值。当JVM加载类时,永久域中的对象急剧增加,从而使JVM不断调整永久域大小。为了避免调整,可使用-XX:PerSize标志设置初始值。下面把永久域初始值设置成32m,最大值设置成64m。 Java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m 默认状态下,HotSpot在新域中使用复制收集器。该域一般分为三个部分。第一部分为Eden,用于生成新的对象。另两部分称为救助空间,当Eden充满时,收集器停止应用程序,把所有可到达对象复制到当前的from救助空间,一旦当前的from救助空间充满,收集器则把可到达对象复制到当前的to救助空间。 From和to救助空间互换角色。维持活动的对象将在救助空间不断复制,直到它们获得使用期并转入旧域。使用-XX:SurvivorRatio可控制新域子空间的大小。 同NewRation一样,SurvivorRation规定某救助域与Eden空间的比值。比如,以下命令把新域设置成64m,Eden占32m,每个救助域各占16m: Java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2 如前所述,默认状态下HotSpot对新域使用复制收集器,对旧域使用标记-清除-压缩收集器。在新域中使用复制收集器有很多意义,因为应用程序生成的大部分对象是短寿命的。理想状态下,所有过渡对象在移出Eden空间时将被收集。 如果能够这样的话,并且移出Eden空间的对象是长寿命的,那么理论上可以立即把它们移进旧域,避免在救助空间反复复制。但是,应用程序不能适合这种理想状态,因为它们有一小部分中长寿命的对象。 最好是保持这些中长寿命的对象并放在新域中,因为复制小部分的对象总比压缩旧域廉价。为控制新域中对象的复制,可用-XX:TargetSurvivorRatio控制救助空间的比例(该值是设置救助空间的使用比例。 如救助空间位1M,该值50表示可用500K)。该值是一个百分比,默认值是50。当较大的堆栈使用较低的sruvivorratio时,应增加该值到80至90,以更好利用救助空间。用-XX:maxtenuring threshold可控制上限。 为放置所有的复制全部发生以及希望对象从eden扩展到旧域,可以把MaxTenuring Threshold设置成0。设置完成后,实际上就不再使用救助空间了,因此应把SurvivorRatio设成最大值以最大化Eden空间,设置如下: Java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 … 4.BEA JRockit JVM的使用 Bea WebLogic 8.1使用的新的JVM用于Intel平台。在Bea安装完毕的目录下可以看到有一个类似于jrockit81sp1_141_03的文件夹。这就是Bea新JVM所在目录。不同于HotSpot把Java字节码编译成本地码,它预先编译成类。 JRockit还提供了更细致的功能用以观察JVM的运行状态,主要是独立的GUI控制台(只能适用于使用Jrockit才能使用jrockit81sp1_141_03自带的console监控一些cpu及memory参数)或者WebLogic Server控制台。 Bea JRockit JVM支持4种垃圾收集器: 4.1.1.分代复制收集器 它与默认的分代收集器工作策略类似。对象在新域中分配,即JRockit文档中的nursery。这种收集器最适合单cpu机上小型堆操作。 4.1.2.单空间并发收集器 该收集器使用完整堆,并与背景线程共同工作。尽管这种收集器可以消除中断,但是收集器需花费较长的时间寻找死对象,而且处理应用程序时收集器经常运行。如果处理器不能应付应用程序产生的垃圾,它会中断应用程序并关闭收集。 分代并发收集器 这种收集器在护理域使用排它复制收集器,在旧域中则使用并发收集器。由于它比单空间共同发生收集器中断频繁,因此它需要较少的内存,应用程序的运行效率也较高,注意,过小的护理域可以导致大量的临时对象被扩展到旧域中。这会造成收集器超负荷运作,甚至采用排它性工作方式完成收集。 4.1.3.并行收集器 该收集器也停止其他进程的工作,但使用多线程以加速收集进程。尽管它比其他的收集器易于引起长时间的中断,但一般能更好的利用内存,程序效率也较高。 默认状态下,JRockit使用分代并发收集器。要改变收集器,可使用: -Xgc: 对应四个收集器分别为gencopy,singlecon,gencon以及parallel。可使用-Xms和-Xmx设置堆的初始大小和最大值。要设置护理域,则使用: -Xns:Java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m… 尽管JRockit支持-verbose:gc开关,但它输出的信息会因收集器的不同而异。JRockit还支持memory、load和codegen的输出。 注意 :如果 使用JRockit JVM的话还可以使用WLS自带的console(C:/bea/jrockit81sp1_141_03/bin下)来监控一些数据,如cpu,memery等。要想能构监控必须在启动服务时startWeblogic.cmd中加入-Xmanagement参数。 5.如何从JVM中获取信息来进行调整 -verbose.gc开关可显示gc的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。打开-xx: printgcdetails开关,可以详细了解gc中的变化。 打开-XX: PrintGCTimeStamps开关,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。最后,通过-xx: PrintHeapAtGC开关了解堆的更详细的信息。 为了了解新域的情况,可以通过-XX:=PrintTenuringDistribution开关了解获得使用期的对象权。
Java垃圾回收机制详解:从原理到实践 Java垃圾回收机制(GC)是JVM自动管理内存的核心功能,负责回收不再使用的对象内存。文章详解了GC基础概念(垃圾定义、四种引用类型)、堆内存结构(年轻代、老年代)和对象分配流程。重点介绍了四种经典算法:标记-清除、复制、标记-整理和分代收集。最后剖析了主流垃圾收集器(Serial、ParNew、Parallel Scavenge、CMS和G1)的特点和使用场景,并提供了JVM参数配置示例。理解GC机制有助于开发者优化内存管理和应用性能。 阅读详情

相关推荐

JVM 调优实战 - VM的垃圾回收机制

JVM的垃圾回收机制是Java语言的重要特性,它能够自动管理内存,提高开发效率和程序的稳定性。通过理解垃圾回收的基本原理、算法和调优方法,我们可以更好地优化Java应用的性能,确保其在各种场景下都能高效稳定地运行。希望这篇文章能帮助你更好地理解JVM的垃圾回收机制及其调优方法。如果有任何问题或进一步的讨论,欢迎随时交流。本文已收录于,我的技术网站,有大厂完整面经,工作技术,架构师成长之路,等经验分享JDK源码(1)-阅读指引JDK源码(10)-Integer(用处最多,重点讲解)

程序员Linc 1020

深入聊聊Java 垃圾回收机制【附原理图及调优方法】

1、如何判断对象可以回收 1.1引用计数法 1.2可达性分析算法 1.3四种引用 2、垃圾回收算法 2.1标记清除 定义:Mark Sweep 速度较快 会造成内存碎片 2.2标记整理 定义:Mark Compact 速度慢 没有内存碎片 2.3复制 定义:Copy 不会有内存碎片 需要占用双倍内存空间 3、分代垃圾回收 对象首先分配在伊甸园区域 新生代空间不足时,触发minor gc,伊甸园和from存活的对象使用 copy复制到 to中,...

认知 行动 坚持 4375

深入解析JVM垃圾回收机制:从GC算法到实战调优

JVM垃圾回收机制自动管理Java堆内存中的对象,通过定期回收不再使用的对象来释放内存空间。垃圾回收器(GC)是这一机制的核心组件,它负责识别并回收垃圾对象。JVM垃圾回收机制是Java开发中的重要组成部分,它直接影响到应用的性能和稳定性。通过深入理解GC算法和垃圾回收器的工作原理,以及掌握实战调优技巧,开发者可以更好地优化Java应用的内存管理,提高应用的性能和响应速度。希望本文能够帮助开发者更好地掌握JVM垃圾回收机制,为Java开发之路打下坚实的基础。

shejizuopin的博客 998

JVM详解之Java垃圾回收机制详解和调优

JVM详解之Java垃圾回收机制详解和调优 转自:http://java.ccidnet.com/art/3539/20060314/476073_1.html 1.JVM的gc概述   gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执

xiajian2010的专栏 1万+

深入理解JVM内存模型与垃圾回收机制:从原理到实战调优

本文由王文峰撰写,深入探讨了JVM内存模型与垃圾回收机制,旨在帮助Java开发者解决生产环境中的内存管理问题。文章首先解析了JVM内存结构,包括Metaspace、堆内存分代和直接内存分配,接着详细介绍了对象分配与晋升机制,并对比了不同垃圾回收器的适用场景。随后,文章通过源码级解析G1收集器的内存布局、并发标记流程和记忆集优化,并结合电商平台订单系统的调优案例,展示了如何通过JVM参数调整和代码修复解决Full GC问题。最后,文章提供了性能优化进阶技巧,如逃逸分析和Shenandoah收集器的使用,并展望

王大师企业官方博客 1313

JVM性能优化:垃圾回收机制的调优

垃圾回收机制是Java应用性能优化的重要方面。通过合理的GC调优,可以有效地减少GC带来的停顿时间,提高系统的响应性和吞吐量。调优的关键在于理解JVM内存结构、掌握不同垃圾回收器的特性、监控和分析GC指标,并根据实际应用的需求选择合适的GC策略。在进行GC调优时,务必根据应用的特点和需求,逐步调整参数,测试不同配置对性能的影响,最终达到优化效果。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1167

JAVA堆内存内存管理调优垃圾回收机制与算法垃圾收集器选择与调优【常见问题与解决方案】

JVM调优需结合应用场景,平衡吞吐、延迟和内存占用。核心步骤包括:合理设置堆内存、选择匹配的垃圾收集器、监控GC日志及内存使用。对于高并发或大数据应用,优先考虑G1或ZGC;传统批处理场景可选择Parallel GC。具体参数需通过压测验证,避免过度优化引发新问题。学习教程(传送门)1、掌握JAVA入门到进阶知识(持续写作中……2、学会Oracle数据库用法(创作中……3、手把手教你vbs脚本制作(完善中……4、牛逼哄哄的IDEA编程利器(编写中……5、吐血整理的面试技巧(

王大师企业官方博客 1688

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 492

JVM:垃圾回收机制和调优手段

我们都知道JVM内存由几个部分组成:堆、方法区、栈、程序计数器、本地方法栈JVM垃圾回收仅仅针对公共内存区域即:堆和方法区进行。本文主要讨论两点,一是垃圾回收策略,二是调优的方法。一、垃圾回收机制1.1 分代管理将堆和方法区按照对象不同年龄进行分代:u  堆中会频繁创建对象,基于一种分代的思想,按照对象存活时间将堆划分为新生代和旧生代两部分,我们不能一次垃圾回收新生代存活的对象就放入旧生代,而是要

jiq•钦's technical Blog 1万+

搭建云平台 1 Day 虚拟机安装(超详细)

点击OFF 那个按钮看看网络的地址和速度有没有显示,如果有 则到目前为止都是成功的。Host name随便起一个名字就行了**-_-**文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**,如果我们安装的VMware14就会默认为。因为我的是VMware16,所以默认。也是可以的,但是千万不要用。

2401_84009679的博客 563

LM Studio 模型加载与转换实战指南:从GGUF格式到本地部署

本文提供了使用LM Studio加载与转换GGUF格式大语言模型的完整实战指南。详细阐述了为何GGUF格式是本地部署的最佳选择,并逐步指导用户如何将非GGUF模型(如Transformers格式)转换为GGUF格式,以及在LM Studio中进行加载、配置GPU卸载等关键优化,最终实现流畅的本地离线对话体验。

weixin_29061425的博客 924

JVM垃圾回收机制详解与调优

JVM垃圾回收机制如同精密的瑞士钟表,每一个齿轮的转动都影响着整体性能。通过本文的深度解析,希望读者不仅能够应对面试提问,更能将GC调优能力应用到真实生产环境中,打造高吞吐、低延迟的Java应用。真正的调优应该永远始于数据,而非猜测。

weixin_54072317的博客 879

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 839

Java的垃圾回收机制介绍、工作原理、算法及分析调优

Java的垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)提供的一种自动内存管理机制,用于自动回收不再使用的内存空间,以避免内存泄露和内存溢出等问题。下面主要介绍Java垃圾回收的基本概念、工作原理、算法等。

jackiendsc的博客 1995

U盘重装Win10系统

准备工作 准备一个8G或8G以上U盘(32G以内) 请备份好u盘里的资料,在制作过程中会格式化硬盘 请备份好要安装系统的盘的资料,安装时也会对该盘内容进行格式化。 将u盘插入电脑usb接口中,尽可能的插入usb3.0的接口,这样下载和安装速度会更快。 1.到微软官网下载安装包 浏览器输入:微软官网下载win10 懒人请复制粘贴:https://www.microsoft.com/zh-cn/software-download/windows10 ​ 打开之后的界面: 2.下载Media Creat.

Cici$的博客 2116

【ZYNQ】VDMA 的使用

VDMA, Video Direct Memory Access 是 Xilinx 官方提供的高速内存存取 IP,采用 AXI4-Stream 与 AXI4 协议实现存储映射接口(Memory Map)与非存储映射接口(Non-Memory Map)接口的转换,主要用于视频数据缓存,同时提供帧缓存与帧同步控制功能。本文主要介绍 AXI VDMA 的配置与使用方法。

洋洋Young的博客 1582

Java中垃圾回收机制的工作原理及调优策略有哪些?

例如,Serial垃圾回收器适用于单线程环境,Parallel垃圾回收器适用于多核CPU环境,CMS垃圾回收器注重低延迟,而G1垃圾回收器则追求整体性能平衡。在实际开发中,我们应该根据应用程序的特点和需求,选择合适的垃圾回收器、调整堆内存大小、优化对象使用以及进行监控和调优,以提高程序的性能和稳定性。实际上,了解垃圾回收的工作原理,通过合理的编程习惯和配置,可以降低垃圾回收的频率和开销,提高程序性能。如果堆内存过大,虽然可以降低垃圾回收的频率,但会增加每次垃圾回收的开销。来自:www.ftinc.cn。

CarlHosea的博客 906

通信原理 | CRC循环冗余校验码(最简介明了的原理和matlab程序)

异或运算: 多项式: CRC校验中用到的除数,是由多项式的各项系数组成的,如下所示: 没有的项系数为0,比如:x5次方、x3次方下一步,在原数据串的末端加“0”0的数量由多项式决定具体来说,多项式的阶数是多少就加几个0 具体操作: 现在,我们有了除数,也有了处理过的数据串,如下所示: 就可以开始计算校验和 了将数据串第一个1与除数左对齐,按位进行异或操作: 将未处理的数据搬下来作为新的数据,重复操作: 将新的数据串第一个1与除数左对齐,再重复按位异或操作: 如此循环,直到所有数据都处理过

若北辰 2358

Java中的JVM调优:内存模型与垃圾回收机制的优化

在实际项目中根据服务器资源和程序需求配置内存参数。学习和探索更多的JVM调优高级技巧,如内存泄漏检测和性能分析。阅读和分析优秀的Java项目,学习如何在实际项目中应用这些技术。希望这篇博客能够帮助你深入理解JVM内存模型和垃圾回收机制的优化方法,提升你的开发效率和代码质量!如果你有任何问题或建议,欢迎在评论区留言!

司徒鸿的博客 969

地图自定义编码CSV转换成ini文件

创 建 schema.ini 文件:有时,当您尝试使用 .csv 文件将自定义地理信息导入 Tableau 时,您可能会看到“无法使用.csv,因为它不包含唯一列”错误消息。这是因为您的 .csv 文件可能包含数值数据,例如数值邮政编码。对于新的地理角色,Tableau 将只接受文本字段。但是,您可以创建一个 schema.ini 文件,以指示 Tableau 应将您要导入的数值字段视为文本字段。...

wenyusuran的专栏 1975

假人有限元模型

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

JVM 垃圾回收机制、垃圾收集器、调优参数

目录判断对象是否存活的算法引用计数法可达性分析法垃圾回收算法标记清除算法复制算法标记整理算法JVM垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器CMS收集器总结   C++的一个很麻烦的问题就是内存回收,不回收可能会造成内存泄漏,Java中内存回收由GC完成,不用我们回收内存。堆是垃圾回收的重点区域。   在运行配置的VM options中设置参数,可以在控制台打印gc信息 -verbose:gc -XX:+PrintGCDetails &n

chy-x 的博客 2600

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 在Eclipse3.0.x配置基于STRUTS的WEB开发环境(相关下载)
下一篇: Java组件VLDocking 2.0.2新版发布
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值