浅谈一下常见的垃圾回收机制

谈谈你对垃圾回收机制的了解?.docx 一, 垃圾回收机制 在系统运行过程中会产生一些无用的对象,这些对象一直占用内存,不清理这些无用的对象可能会导致内存耗尽,所有垃圾回收机制的是内存. 垃圾收集的原理和概念 对于对象实例收集.主要有两种基本算法,引用计数算法,可达性分析。 引用计数算法:就是为对象添加一个引用计数,用于计数对象被引用的情况,如果计数为0,表示 对象可以被回收.(java并没有选择引用计数,因为存在一个基本难题,就是很难处理循环引用关系) 可达性分析:这种类型的垃圾收集通常叫做跟踪性垃圾收集器。 原理很简单,就是将对象即及引用关系看着一个图。选定活动对象作为 GC Roots,然会跟踪引用链,如果一个对象和GC Roots之间不可达,也就是说不存在引用链,那么即可认为是2可回收对象。jvm会把虚拟机栈和本地方法栈中正在引用的对象、静态属性引用的对象和常量,作为 GC Roots。 立即下载

如何工作

在某些 Java 虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就向前移动一格。 这意味着对象存储空间的分配速度特别快。Java 的"堆指针"只是简单地移动到尚未分配的区域,所以它的效率与 C++ 在栈上分配空间的效率相当

垃圾回收器工作时,一边回收内存,一边使堆中的对象紧凑排列,这样堆指针就可以更容易的移动到空闲区域的位置上 垃圾收集器在分配存储空间的同时会将对象重新排列,由此实现一个高速的、有无限空闲空间的堆模型。

  1. 对象可能不被垃圾回收

  2. 垃圾回收不等于析构

  3. 垃圾回收只与内存有关

  4. 无论是“垃圾回收”还是“终结” ,都不一定保证会发生; 如果java虚拟机(JVM)并未面临内存耗尽的情况,它可能不会浪费时间执行垃圾回收以恢复内存

finalize()方法 (有个大概印象即可)

finalize()方法

终结条件

安全的标记对象是否可以被终结,例如下例 要销毁未被登记的Book对象时,报错

System.gc();强制终结

class Book{ boolean checkedOut = false; public Book(boolean checkOut) { this.checkedOut = checkOut; } void checkIn(){ this.checkedOut = false; } @Override protected void finalize()throws Throwable{ //只有登记过的 才能被删除 这就可以作为终结的条件 if(checkedOut){ System.out.println("ERROR: checked out"); } // Normally, you'll also do this: // super.finalize(); // Call the base-class version } } public class JavaTest{ @Test public void test8() throws InterruptedException { Book book = new Book(true); book.checkIn(); new Book(true); System.gc(); Thread.sleep(1000); } }

垃圾回收机制

引用计数

原理:每个对象中都有一个引用计数器,每当有引用指向该对象时,引用计数器+1;当引用离开作用域或是被置为null时,引用计数器-1;如果发现某个对象的引用计数为0时,就释放其空间(引用计数器模式经常会在计数器为0时立即释放对象)

特点:

  1. 简单

  2. 速度慢(开销不大,但在整个生命周期频繁发生的负担)

  3. 在每次内存对象被引用或引用被销毁的时候都必须修改引用计数,这类操作被称为footprint。引用计数的footprint是很高的。这使得程序整体的性能受到比较大的影响

  4. 出现循环引用时会出问题(应该被回收,但没有)

  5. .btw:"引用计数通常用于解释垃圾收集的工作方式,但它似乎并没有出现在任何JVM实现中"

更快的策略依据

对于任何没有被废弃的对象,最终都能追溯到它存活在栈或静态存储区中的引用 因此,如果从栈和静态存储区开始遍历所有引用(包括对象内部的),就能找到所有存活的对象 匿名对象的相关思考:我们通常将匿名对象作为方法参数传递,func(new B()),在该方法中,B对象被关联了引用

所以,遍历所有的引用即可得到所有“活”的对象,然后再去遍历这些对象中的引用,如此反复,就能得到一个对象网络,其中的对象就都是 活 的;

循环引用示例

上例 当栈上的引用遍历到a,发现a对象中有个B对象的引用,指向b,这个b引用中又有个A的引用 又指向a 如此循环 根本找不到活的对象

这样也解决了循环引用问题,循环引用的对象不会被发现

停止-复制(stop-and-copy)

原理:先暂停程序的运行,然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的就是需要垃圾回收的,而且,当对象被复制到新堆后,他们紧凑排列的,一个挨着一个

特点:

  1. 解决了循环引用的问题(循环引用的对象不会被发现)

  2. 非后台回收模式(需要在程序暂停的情况下进行)

  3. 相对较快

  4. 效率低下

  5. 得有两个堆:还得在这两个分离的堆之间来回折腾,得维护比实际多一倍的空间

  6. 某些jvm的解决方式:按需在堆中分配几块较大的内存,复制动作就发生在这大内存间

  7. 复制本身:一旦程序进入稳定状态,可能只会产生少量垃圾,甚至没有,就算是这,复制回收器也得将所有 内存从一处复制到另一处,太浪费了

  8. 某些JVM的解决方式:进行检查,要是没有新的垃圾产生,就会转换到“标记-清扫"模式(SUN公司早期JVM一直在用)。对一般用途,这种方法很慢,但当程序只会产生少量或者不产生垃圾,他速度就很快了

  9. 切换到标记清扫方式清理

标记-清扫

原理:标记:从栈和静态存储区出发,遍历所有引用,找出所有“活”对象,每找到一个,就给对象一个标记,直到遍历完所有对象;清扫:没有被标记的对象将被清理。

特点:

  1. 解决了循环引用的问题(循环引用的对象不会被发现)

  2. 相比停止-复制 较为高效(不会有任何复制动作)

  3. 非后台回收模式(需要在程序暂停的情况下进行)

  4. 处理完后剩下的堆空间是不连续的 垃圾回收器若希望得到连续的空间,就需要整理剩下的未被清理的对象

标记-整理

原理:标记:从栈和静态区域出发,遍历所有引用,对遍历过程中得到的活的对象进行标记;整理:将标记过的对象,把他们从内存开始的地方按照顺序依次摆放好,中间没有任何缝隙,在摆放完最后一个对象后,对后面的内存区域直接回收。

JVM中的块(感觉像是年龄分代)

  • 内存分配以较大的"块"为单位,较大的对象会单独占一个块。

  • 块用年代数来记录自己是否存活,若块被引用,年代数+1。

  • 垃圾回收器会对上一次回收过后 新分配的块进行整理

  • 垃圾回收器定期会清理 含有小对象的那些块将被复制、整理 大型对象 不会被复制(只有年代数会增加)

分代收集算法

当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将 java 堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。

比如在新生代中,每次收集都会有大量对象死去,所以可以选择”标记-复制“算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。

标记清扫与停止复制的切换机制(自适应)

如果对象一个个的都很稳定,此时如果垃圾回收效率降低了,就会切换到“标记-清扫”模式,以提高垃圾回收的效率,(此时jvm持续监视) 如果堆中的碎片多了,那么就赶紧切换回“停止-复制”模式,以真整理堆空间,保持堆的高速运转。

HotSpot技术

java执行步骤

​

即时编译技术(Just-in Time JIT)

想要了解更多请移步什么是JIT?怎么优化? - 知乎 (zhihu.com)

热点代码分为两类: 多次调用的方法 多次执行的循环体,实际上也会以整个方法作为编译对象 如何判断热点代码请看原文

可以把 全部或部分 程序 直接翻译为本地机器码,这就省去了JVM翻译,所以运行更快

为什么不能用这个技术 编译所有代码?

  • 这个技术贯穿整个程序的生命周期,累加起来慢的要死

  • 会增加可执行代码的长度(字节码要比即时编译器展开后的本地机器码小很多),导致页面调度,使程序运行变慢

  • 即时编译时以方法为单位的,如果编译出来的代码运行不了几次,就白编译了

惰性评估

即时编译器只有在必要时,才编译代码

这样,从未被执行的代码也许就压根不会被 JIT 编译。

新版 JDK 中的 Java HotSpot 技术就采用了类似的做法,代码每被执行一次就优化一些,所以执行的次数越多,它的速度就越快。

逃逸分析技术

请移步至深入理解Java中的逃逸分析

逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。

目前就总结了这些,有更好的欢迎补充!

Zemax 中的 LED 阵列模型 这些光线是所有光线的子集,用于布局可视化,而不是详细分析。X 和 Y 散度(αx 和 αy)以度为单位,以不同的方式设置为 6 度和 12 度。每个 LED 都以朗伯模式(广角分布)发光,尽管有些 LED 具有内置光学元件,用于更窄或更聚焦的光束。,具体取决于这些类别中使用的半导体材料。LED 阵列由多个发光二极管 (LED) 组成,这些二极管以特定模式或配置排列,以实现均匀照明、更高强度或特定照明特性。如果数据的存在更改为“辐射强度”,则它以弧度为单位显示每个立体角的功率,作为探测器上入射角的函数。 阅读详情

相关推荐

第4章 Stata参数检验

目录 4.1单一样本T检验 案例延伸 4.2独立样本T检验 案例延伸 1.改变置信水平 2.在异方差假定条件下进行假设检验 4.3配对样本T检验 案例延伸 1.改变置信水平 4.4单一样本方差的假设检验 案例延伸 4.5双样本方差的假设检验 参数检验(Parameter Test)是指对参数的平均值、方差、比率等特征进行的统计检验。参数检验一般假设统计总体的具体分布为已知,但是其中一些参数或者取值范围不确定,分析的主要目的是估计这些未知参数的取值,或者对这些参数进...

qq_45112156的博客 1万+

常见的垃圾回收机制

在某些 Java 虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就向前移动一格。这意味着对象存储空间的分配速度特别快。Java 的"堆指针"只是简单地移动到尚未分配的区域,所以它的效率与 C++ 在栈上分配空间的效率相当垃圾回收器工作时,一边,一边,这样。

Candyz7的博客 462

FANUC机器人PROFINET通讯方式组态

6 然后对模块进行命名及更改IP地址,点击“Network Detection”,进行扫描,会生成下图,双击商科模块会生成下边的对话框,对模块进行命名及更改IP地址,在“Permanent Name”处点对勾,完成后点击“Apply Name及Apply”进行命名。此处注意,上图左上在线在不了,网络扫描处上面也灰色的,扫描不了。5双击abcc-prt-2-port RT(FW1.13),生成下面图标,在右边点击1、2把原来内容删掉,从新在左侧加载 ,使1、2是输出,3、4为输入,完成后点击OK。

dxs93的博客 8435

java中的垃圾回收机制_详细介绍Java垃圾回收机制

垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。引用计数收集器...

weixin_29255731的博客 354

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 409

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

浅谈垃圾回收机制

垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露。 ...

yzkdcsdn的博客 160

如何使用ArcGIS Pro制作带基底三维地图

点击运行生成范围线,因为之前对高程进行了夸大,导致生成的范围线和地形边缘不重合,我们打开范围线的图层属性,选择高程选项卡,要素位于选择地面上,如下图所示。目前制作的三维地图下面是空的一片,现在添加一个基底,在工具箱内点击“3D Analyst工具\栅格\转换\栅格范围”,调用栅格范围工具,如下图所示。打开ArcGIS Pro,新建一个局部场景,在高程表面下,地面上点击右键,选择添加高程源图层,将需要制作三维地图的DEM数据加载进来,如下图所示。在要素图层菜单内,类型选择绝对高度,如下图所示。

3979

什么是垃圾回收机制(超详细)

1.垃圾回收机制(Garbage Collction)简称GC,是JavaScript中使用的内存管理系统的基本组部分,是为了防止内存泄漏2.JavaScript是在创建变量(对象、字符串等)时自动进行了分配内存,并且在不使用他们时“自动释放。”3.内存在不适用的时候就被垃圾回收器自动回收。

zzy_999的博客 9709

Cadence仿真实战:从零构建高精度带隙基准电压源

本文是一份详细的Cadence仿真实战指南,指导读者从零开始构建高精度带隙基准电压源。文章首先解释了带隙基准电压源稳定输出电压的原理,然后逐步演示了在Cadence Virtuoso环境中如何搭建测试电路、测量关键温度系数、计算并搭建核心电路,并通过参数扫描和迭代调优来驯服温度漂移,最终实现低漂移的基准电压输出。

weixin_29207533的博客 244

今日头条面试——iOS开发面试题

layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。

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

JVM:常用的四种垃圾回收机制

cms是一个基于标记-清除 算法的综合多种算法的老年代垃圾回收器适用场景:重视服务器响应速度,要求系统停顿时间最短。这里要说明下,这是一个老年代算法,年轻代怎么处理?不回收了嘛?这里其实年轻代是采用的其它算法,具体看策略,Java 参数可以选择策略。这里下文也会涉及到主要的pipeline如下1、初始标记(CMS initial mark)

xiaocaij_icai的博客 7043

2026年北京君正数字IC笔试试卷带答案

本文摘要:该文档是一份数字IC设计相关的考试试题,包含单选题、多选题、波形分析题和代码设计题。内容涵盖时序约束、半导体工艺、状态机设计、逻辑综合、异步FIFO设计等知识点。试题解析详细,重点考察数字电路基础、时序分析和Verilog代码实现能力。典型题目包括多周期路径设置、Moore/Mealy状态机区别、同步复位与异步复位特性、RISC-V架构特点等,并提供了异步FIFO的Verilog实现参考代码。(149字)

Open 114

【C#】浅谈C#中垃圾回收机制

C#从入门到精通(第7版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用C#进行Windows应用程序开发方方面面的技术。

测试开发自动化 8958

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

浅谈 Java 垃圾回收机制

同时,随着 Java 技术的不断发展,垃圾回收机制也在不断演进,未来可能会出现更加高效、智能的垃圾回收技术,进一步提升 Java 应用程序的性能和可扩展性。随着时间的推移,内存碎片化会越来越严重,这可能导致即使有足够的空闲内存总量,但由于这些空闲内存不连续,无法满足较大对象的内存分配需求,从而不得不提前触发垃圾回收,甚至可能导致 OutOfMemoryError 错误。例如,在 C 语言中,如果手动释放了一个对象后,没有将指向该对象的指针置为 NULL,后续可能会误操作这个悬空指针,导致严重的程序错误。

weixin_69477306的博客 995

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

浅谈Android垃圾回收机制

Android垃圾回收机制详解 ​ 近来在深挖Android的垃圾回收机制,发现这方面原本数量少得可怜的技术文章却大多早已过时,无奈下只好多方查阅资料,现在我就了解到的情况做一个总结,希望对你有所帮助,如有错误欢迎在评论区指出。 前言 ​ Android如今使用的虚拟机名叫Android Runtime,简称Art(本文后面将用Art来指代Android虚拟机),而Art的其中一大职责就是负责垃圾回收。 ​ 在讲述Art的垃圾回收机制之前,还需要了解Art如何判定一个对象是垃圾。 ​ 目前主流有两种判定算法

DoubleYellowIce的博客 2045

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

浅谈Java垃圾回收机制

今天来谈谈Java垃圾回收机制,为何谈这个呢?毕竟这个是Java的一大特色,也是进阶之路需要去深入了解的地方。学过C++的同学都知道,C++编程中,对象所占的内存在程序结束运行之前会一直被占用,在明确释放之前不能分配给其它对象。 而在Java中,如果没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。而负责编译的Java虚拟机-JVM的一个系统级线程则自动释放该内存块。垃圾的回

Simple的博客 4773

浅谈JAVA垃圾回收机制

浅谈JAVA垃圾回收机制 垃圾回收机制是JAVA的主要特性之一,在对垃圾回收机制进行概述之后,本文从“失去引用”和“离开作用域”这两个角度分析了JAVA程序中的对象在何种条件下满足垃圾回收的要求。最后,本文简要介绍了垃圾回收机制的两个特性。   Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。 需要注意的是:垃圾回

Full Stack 2709

浅谈JS垃圾回收机制

本文介绍了JavaScript中的垃圾回收机制。垃圾指不再使用的变量、函数或对象(如已执行函数、null值或无法从全局访问的值)。垃圾回收可防止内存占用过多导致程序卡死。主要回收方法有:1)引用计数法(通过引用次数判断,但存在循环引用问题);2)标记清除法(从全局根对象出发标记可达对象,未标记的视为垃圾)。针对标记清除的性能问题,提出了优化方案:分代回收(区分新旧对象)、增量收集(分批处理)和闲时收集(利用CPU空闲时间)。这些方法有效提升了垃圾回收效率,减少对程序运行的影响。

mldxka的博客 814

浅谈 JavaScript 垃圾回收机制

JavaScript 垃圾回收机制

雲的博客 863

什么是java垃圾回收机制_浅谈Java垃圾回收机制

原标题:浅谈Java垃圾回收机制一、浅谈java中的垃圾回收机1. GC技术背景浅谈JVM垃圾回收的前世今。说起垃圾回收机制(GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,早在1960年Lisp这门语言中就使用了内存动态分配和垃圾回收技术。2. JVM内存回收程序员们知道,jvm内存结构分为五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中虚...

weixin_32273159的博客 649

浅谈PHP7的垃圾回收机制

最近一直在看关于PHP得来讲回收机制,今天总结一下,写下来,一来让自己的影响更加深刻一些,二来为后面继续学习swoole先做一点二准备。 在我看来,垃圾回收机制其实说白了就是将内存回收再使用得一个过程。这些东西一般我们在做PHP开发的时候不会遇到,因为PHP本身已经帮我们做好了这些。在了解垃圾回收机制之前,我们先要对内存有一个概念,这块不清楚的建议大家先去了解一下。就想我前面说的,垃圾回收机...

PHP视界 1302

浅谈 JVM 的内存划分、类加载、垃圾回收机制

java程序在运行之前需要先编译(将 .java文件变成 .class文件(二进制字节码文件))java程序运行时,java进程(即 JVM)就会读取对应的 .class 文件,并且解析内容,在内存中构造出类对象,并进行初始化…类对象:描述了这个类是什么样的,类里包含哪些属性,这些属性的名字、类型,被什么修饰词修饰;类里包含哪些方法,这些方法的名字、类型是什么;还描述了这些类继承自哪个父类,实现了哪些接口。因此类对象也是创建实例的具体依据。类加载就是:将类从文件加载到内存中。

m0_63191002的博客 978

浅谈GC 垃圾回收机制

其实作为小白的我写程序中根本不用管内存的分配和垃圾回收。但我想了解了解垃圾回收机制,于是稍微花了点时间研究了一下Microsoft .NET的垃圾回收机制。看了一篇英文的介绍,好不容易翻译了一点(我是文章的搬运工,只是翻译了一遍,没有原创性)。如有理解错误的地方,敬请提出。 如果让我们自己写程序实现合理的资源管理,我想肯定很多人都写不出来(包括我)。资源管理对我们来说是一个困难、乏味的工作。也有...

记录和分享 613

浅谈JAVA垃圾回收机制及其回收时机

众所周知,Java与C++相比有一个明显的不同就是:Java拥有自动垃圾回收机制,而C++的垃圾回收则完全由程序员自己手动完成,这不仅对程序员本身素质有一定的要求,还提高了内存泄漏的风险。         以下内容参考《深入理解Java虚拟机》一书,经过自己理解整理而来,欲知完整全面的内容,请参看原著。如何判断一个对象已经“死亡”        首先,我们需要知道JVM如何判断一个对象已经“死亡”

wk51920的专栏 6275
上一篇: 四种方法实现Mysql中JDBC如何实现自动重连机制
下一篇: 近40000字带你走完Spring Boot工程开发流程
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值