【应用软件】JVM学习

为什么要学习JVM? 1、最初是为了面试 跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看。所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试。但我经过了几年的学习和实战,我发现其实学习虚拟机并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。 2、深入理解Java 对于刚刚工作一两年的朋友来说,各个 API 都没用熟,自然不会去深入研究 Java 中的各种细节。但对于工作了三年以后的朋友来说,很多时候你要解决一个问题必须深入到字节码层次去分析 阅读详情

【应用软件】JVM学习

By Leo

JAVA及JDK介绍

1、概述

  Java不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式终端、移

动终端、企业服务器和大型机等各种场合。

2、JAVA技术体系(Sun官方定义)

   Java程序设计语言

      各个硬件平台上的Java虚拟机

      Class文件格式

      Java API类库

   来自商业机构和开源社区的第三方类库

JAVA及JDK介绍

3、JDK(Java Development Environment )

   JDK是用于支持java程序开发的最小环境,包括Java程序设计语言,Java虚拟机、Java API类库。

4、JRE(java Runtime Environment)

   JRE,是支持Java运行的标准环境,包括Java API类库中Java SE API子集和Java虚拟机 。

5、Java Card、Java ME、Java SE、 Java EE

    

 

JAVA及JDK介绍

6、Java (JDK)发展

      具体参考:

      http://en.wikipedia.org/wiki/Java_version_history#cite_note-48 

     

      

7、JDK最新版本

 j2sdk-1.4.2-19

    jdk-1_5_0_22 

 jdk-6u29

  jdk-7u1

JDK有多少?

主要的Java虚拟机

Oracle HotSpot

Oracle JRocket(BEA)

IBM J9

Apache Harmony (IBM & Intel,间接催生Dalvik 虚拟机)

当然还有开源的OpenJDK

还有很多

如不做特别说明,本ppt中均指Hotspot  JVM。 

JVM  架构

JVM 内存结构

1、PC  Register,看作是当前线程所执行的字节码的行号指示器

      线程切换后恢复到正确位置,每条线程都需要有一个独立的PC Register

2、Java 虚拟机栈,也是线程私有的,描述Java方法执行的内存模型:每个方法被执行时都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等。

3、本地方法栈,为native方法服务。HotSpot  VM中把本地方法栈和虚拟机栈合二为一。

"A native method is a Java method whose implementation is provided by non-java code."

 

JVM  内存结构

4、Java 堆,是Java VM管理的内存中最大的一块,是被所有线程共享的内存区域,在VM启动时创建。

     The heap is the runtime data area from which memory for all class instances and arrays is allocated.

5、Method Area,各个线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、JIT编译后的代码等数据。

(HotSpot 中又称为”永久代”Permanent Generation)

6、直接内存(对外内存)

Hotspot 内存管理

C (malloc / free)

C++ (new / delete)

Java (new / gc)   (Garbage Collection是自动的)

对象生命周期

大部分对象的生命周期都很短,IBM研究显示:

• 98%的对象都是都是临时的,Hotspot采用的分代的方式管理内存

Heap 堆 

概念介绍

GC:garbage collection(垃圾收集)

infant mortality:对象分配以后很快成为垃圾,就称该对象

具有“infant mortality”

minor collection:较小收集,指发生在young generation的GC

major collection:较大收集,指发生在older generation的GC

older generation:年老代,在1.4.2版本之后改称为tenured generation

概念介绍

permanent generation:永久代,又称为永久域,方法区

young generation:新生代

survivor spaces:生存空间

Eden:新对象分配的地方

Hotspot 内存分配

1、对象优先在新生代Eden区分配

      

      当Eden区空间不够时,发起一次Minor GC.

2、大对象直接进入 Old  Generation   (只对Serial 和 ParNew收集器有效)

      -XX:PreTenureSizeThreshold

 

3、长期存活的对象进入 Old  Generation 

      -XX:MaxTenuringThreshold

    

    

Hotspot 内存回收

      垃圾回收(Garbage Collection GC)

1、哪些内存需要回收

2、什么时候回收

3、如何回收


Hotspot 内存回收

GC 就是回收堆中的那些“dead”的对象,怎样判断对象是否存活?

1、引用计数法(很难解决对象之间相互循环引用的问题)

2、根搜索算法  

      Java和C#等,都是使用根搜索算法(GC Roots Tracing)判定对象是否存活的。从“GC Roots”对象作为起始点,从这些节点向下搜索,搜索过的路径称为引用链

(Reference Chain),当一个对象到GC Roots没有任何引用链相连(即不可达)时,就证明该对象是不可用的。

Hotspot 内存回收

回收方法区(永久代)

  

  1、主要回收废弃常量和无用的类

         2、是否对方法区回收:-Xnoclassgc

               -verbose:class 

               –XX:+TraceClassLoading

               -XX:+TraceClassUnLoading

Hotspot 内存回收

垃圾收集算法

1、标记-清除(Mark-Sweep)

2、复制算法

3、标记-整理 (Mark-Compact)

4、分代


串行 和 并行

Stop the world  和 concurrent

压缩和不压缩

Hotspot 内存回收

垃圾收集器

JDK 1.6

update12

分代内存回收使用算法比较

常用分析工具

1、jps        显示运行的HotSpot虚拟机进程

      jps –v

2、jstat      收集HotSpot VM的运行数据

   jstat  -gcutil <pid>

      jstat  -class  <pid>

  

3、jstack    线程快照

      jstack  -l  <pid>


JVM常用分析工具

4、jmap     生成heapdump

      jmap    -histo:live <pid>

   jmap    -histo <pid>

      jmap    -dump:live,file=heap.out,format=b <pid>

5、jinfo      查看配置信息

6、jhat       分析heapdump

JVM常用分析工具   jps 

JVM常用分析工具   jstat

GUI工具

1、 Eclipse  MAT (Memory Analyzer Tool)

2、 VisualVM

   Open Source All-in-One Java Troubleshooting tool

3、 Jconsole

4、 BTrace  是VisualVM的一个插件,是在不停止目标程序的情况下,通过HotSpot虚拟机的HotSwap技术动态加入原本不存在的调试代码

Hotspot  JVM 参数说明

1 、-D    系统参数

2、 -X     non-standard 参数,不保证对所有VM都生效

3、 -XX   options have specific system requirements for correct operations use. 

     

     -X 和 –XX  both  are subject to change without notice.

Hotspot  JVM 参数说明

参考地址:

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

通用参数

-server  -client

-Xms  -Xmx  -Xmn -Xss

-XX:NewSize  -XX:MaxNewSize 

-XX:NewRatio -XX:SurvivorRatio

-Xnoclassgc

 

 


Hotspot  JVM 参数说明

收集器参数

-XX:+UseSerialGC

-XX:+UseParallelGC 

-XX:ParallelGCThreads

-XX:+UseParallelOldGC

-XX:MaxGCPauseMillis

-XX:+UseAdaptiveSizePolicy

 


Hotspot  JVM 参数说明

并发 收集器参数

-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC

-XX:+UseCMSCompactAtFullCollection

-XX:+CMSIncrementalMode(single CPU)

-XX:CMSFullGCsBeforeCompaction

-XX:CMSInitiatingOccupancyFraction

-XX:+UseCMSInitiatingOccupancyOnly

-XX:+DisableExplicitGC(禁止system.gc())

Hotspot  JVM 参数说明

调试参数

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

-XX:OnError= 

        java -XX:OnError="pmap %p" MyApplication

        java -XX:OnError="cat hs_err_pid%p.log|mail     support@acme.com" \ MyApplication

-XX:ErrorFile=filename

-XX:+PrintClassHistogram

-XX:+PrintGCDetails   and -XX:+PrintGCTimeStamps

 

 

 

 

 


JVM简单调优 

调优的目的:

1、提高吞吐量 throughput (Parallel Scavenge)

   

      用户代码运行时间/(运行用户代码时间 + 垃圾回收时间)

 高吞吐量可以有效地利用CPU时间,尽快地完成程序的运算任务, 主要适合在后台运算而不需要太多交互的任务。

2、尽可能地缩短GC时用户线程的停顿时间 (CMS)

时间越短就越适合需要与用户交互的程序,可以提升用户体验

3、GC 的频率

常见的JVM异常

1、Java.lang.OutOfMemoryError:Java heap space

       常见错误,heap空间不足导致,minor GC后仍然不足抛此异常

2、Java.lang.StackOverflowError :

       如果虚拟机请求的栈深度大于虚拟机所允许的最大深度,则抛出此异常

3、Java.lang.OutOfMemoryError:Perm  space

      加载类,进行full gc后permGen空间还不足抛此异常

4、Java.lang.OutOfMemoryError

 

JVM简单调优 

1、-Xms与-Xmx 最好一样大

2、调试时多打印GC信息PrintClassHistogram 、PrintGCDetails、PrintGCDateStamps

3、 (Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction)/100>=Xmn遇到promotion failed 可以按照上面这个公式配置

4、-Xnoclassgc禁用类垃圾回收,性能会高一点

5、-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能

6、-XX:+UseParNewGC,对年轻代采用多线程并行回收

7、定位具体问题的原因,不要一味认为是JVM的问题

 

 

JVM简单调优(经验)

1、如果JVM在80%的时间都用于GC并且可用的HeapSize不足2%时就会导致产生OutOfMemoryError;

2、HeapSize最大不要超过物理内存的80%,一般设置-xms和-xmx相同,-xmn为-xmx的1/4;

3、JVM初始分配的内存由-xms决定,默认为物理内存的1/64,-xmx默认为物理内存的1/4,如果空余堆内存小于40%时,JVM就会增大堆直到-xmx指定的大小限制,如果空余堆内存大于70%时,JVM就

会减小堆-xms指定的大小,因此服务器一般设置-xms和-xmx相同,避免每次GC后调整堆大小。

 

 

JVM 排错案例


JVM

1、业务使用 resin

2、分析典型个JVM参数配置

     -Xms3g -Xmx3g -Xmn512m -Xss1000k 

     –XX:MaxPermSize=120m

     -XX:+UseConcMarkSweepGC 

     -XX:CMSInitiatingOccupancyFraction=80

     -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps

JVM  进程管理GC监控 

JVM   进程管理GC监控

JMX监控配置

 -Dcom.sun.management.jmxremote.port=43 

 -Dcom.sun.management.jmxremote.ssl=false 

 -Dcom.sun.management.jmxremote.authenticate=false 

JVM 监控

java应用线程监控


配图原文地址:http://user.qzone.qq.com/1780551083/blog/1323426981

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

学习Java有必要学习JVM吗? 学习JVM,我发现存在两种态度。 一种是想迅速掌握JVM,死拼周志明的《深入理解Java虚拟机》,结果就是囫囵吞枣,看不懂,没学会,挫败感很强。 另一种是对JVM原理十分不屑,根本不会主动去学。只有面试前了,才去冲刺一把,死记硬背下来,面完进公司了,就丢掉再也不看。 这两样态度,我都不赞成。 曾经的我很不屑于学 JVM,但是后来发现不学不行。这就像和媳妇吵架之后我不想道歉一样,不道歉那是不可能的,道歉是早晚的事儿,逃不掉。 后来我明白了: 认怂越晚,结局越惨。 当了多年Java程序员之后,遇到的项目越来越复 阅读详情

相关推荐

没人看的JVM之JVM概述和学习规划(1)

JVM概述和学习规划 JVM的前世今生(了解即可) Hotspot:目前使用的最多的 Java 虚拟机。在命令行 java –version。它会输出你现在使用的虚拟机的名字、版本等信息、执行模式。 Jrocket:原来属于BEA 公司,曾号称世界上最快的 JVM,后被 Oracle 公司收购,合并于 Hotspot J9: IBM 有自己的 java 虚拟机实现,它的名字叫做 J9. 主要是用在 IBM 产品(IBM WebSphere 和 IBM 的 AIX 平台上) TaobaoVM: 只有一定体量

suikasa的博客 405

Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)

定位排查问题时最为常⽤命令包括:jps(进程)、jmap(内存)、jstack(线程)、jinfo(参数)等。jps:查询当前机器所有Java进程信息jmap:输出某个 Java 进程内存情况jstack:打印某个 Java 线程的线程栈信息jinfo:⽤于查看 jvm。......

记录 分享 成就 2912

JVM(Java虚拟机)

JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化

5款强大的JVM 性能调优监控工具 !

学习视频:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!1408)][外链图片转存中…(img-5CoSqwQt-1713056581408)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

2401_84048671的博客 2785

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3206

【信息安全】seed-labs实验-Firewall Exploration Lab

本实验主要就是基于LKM和Netfilter实现简单的防火墙,重点是后者。路由器是有两个ip的,一个是外网ip,一个是内网ip每一次做完实验,都要做好收尾工作(比如:模块装入之后,要记得移除;iptables命令设置完规则之后,要把对应规则删掉)

可乐大牛的博客 5995

JVM常用分析工具

JVM常用分析工具一、Java Virtual Machine (JVM) Compile once, run everywhere. 二、垃圾收集器与内存回收分配策略 Serial -> 单线程、“Stop the world”、简单 高效{粗暴}、client模式 默认 新生代. ParNew -> 并行 多线程版、CMS 唯一搭档(除了Serial)(server首选).

yisea的博客 6706

Maxwell个人初学经验及资料分享

前段时间学习了课题组基于Maxwell所建立的模型,因为以前从来没有使用过,只是按照一步一步记忆了操作,但总觉得不熟悉,我想是缺乏对这个软件整体的了解,真正想上手只会这一个模型也没有办法扩展。但是我感觉这些有限元分析软件学习起来应该有一些共性,基于以前对COMSOL学习的一点经验,我就在官网和其他网站找了一些学习资源构成一条基础入门之路,也可能有更好的资源,仅代表个人观点做一下分享。以上就是本人对该软件初步学习的一点理解,跟着这样的操作不到一个星期就能初步的掌握。...

怎么又是萝卜的博客 5630

https/http 请求接口工具类及使用(全网最正确的)更新:除了用以下工具类也可以直接用HttpUtil.post(import cn.hutool.http.HttpUtil;)

我们在平时开发当中,免不了调用他人接口 这个时候我们其实有很多种调用形式 如果是微服务项目当中我们利用rpc远程技术进行调用,rpc远程技术其实也是基于httpclient+json 的 一种风格。在这里 我们讲述httpclient形式。在调用他人接口时候有时候会碰到post请求 body里面json数据,携带header 头部,也会碰到get请求 携带param参数情况。 工具类如下 1.SSL https接口的时候需要有ssl package com.zyw.shows.util; import o

全栈世界 3682

用R语言做WGCNA分析全步骤一(附代码解读)【转载】

代码逐句分析一、文章来源二、基因共表达网络构建及模块识别1.数据导入、清洗及预处理2.检查过度缺失值和离群样本3.聚类做离群样本检测4.载入临床特征数据三、自动构建网络及识别模块1.确定合适的软阈值:网络拓扑分析2.一步构建网络和识别模块 一、文章来源 初学WGCNA,觉得博主的代码写的很不错,但其中很多代码在第一遍看的时候有很多地方不理解,后查阅了很多资料,终于看明白了,于是写了一篇笔记,记录自己的学习心得,有不准确的地方,还望各位大佬们不吝赐教~ 原文链接:WGCNA简明指南 二、基因共表达网络构建及模

qq_43138237的博客 2万+

【A_Star三维路径规划】基于matlab A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁)【含Matlab源码 3527期】

A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁) 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 741

【JVM系统学习之路系列】 JVM 概述篇

JVM系统学习之路系列演示代码地址: https://github.com/mtcarpenter/JavaTutorial 前言 大家好,我是小春哥,前面我用了10多个章节对并发编程 JUC 相关知识进行梳理,如果对 JUC知识还不了解的同学,关注我的公众号【山间木匠】从菜单底部可直达,从本篇文章开始更新 JVM 相关知识点,每一个JAVA 开发者应该都能深刻体会,多线程、并发、JVM 是难点也是痛点。 国内学习 JVM 虚拟机的人几乎是人手一本,周志明大神的“深入理解Java虚拟机”书籍。我第一次看.

havendream的博客 1175

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2460

JVM学习总结

JVM 学习总结

北执南念的博客 1662

YOLO26原创自研: 魔改Bottleneck,具备多尺度和特征通道融合的结构

魔改Bottleneck,具备多尺度和特征通道融合的结构,该模型在检测准确性方面都取得了良好的效果,尤其在缺陷检测方向。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 314

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JVM学习

Java Virtual Machine :Java程序的运行环境(java二进制字节码的运行环境)

weixin_74236078的博客 1147

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JVM的定义以及JVM的学习路线

1. 什么是JVM 定义: Java Virtual Machine - java程序的运行环境(java二进制字节码的运行环境)。 好处: JVM是java程序一次编写,到处运行的基石。 JVM屏蔽了java字节码与底层操作系统的差异,对外提供了一个一致的运行环境,JVM用解释的方法来执行二进制字节码,来达到代码的平台无关性。 自动内存管理,垃圾回收功能。 java语言它的出现时期比较早,这个优点是相较于C、C++来说的,C、C++程序在编写的时候程序员要手动释放内存,如果操作不当很容易会造成内存泄漏

qq_50313418的博客 1425

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JVM 学习前置知识

JVM 学习前置知识

m0_63949203的博客 1390

jvm学习

java源代码->二进制字节码->解释器->机器码->CPU记住下一条JVM指令的执行地址(解释器中)每个线程运行需要的内存空间栈帧:一个栈由多个栈帧组成每个方法运行时需要的内存参数局部变量返回地址每个线程只能有一个活动的栈帧,对应正在执行的方法方法执行完成,栈帧出战,对应方法的执行完成通过new关键字,创建对象都会使用堆内存不属于JVM内存,是操作系统内存类加载阶段可分为:加载->连接->初始化加载:将字节码.class文件通过类加载器加入到方法区。

Dearfrienda的博客 1587

JVM学习笔记 01、初识JVM

文章目录前言一、什么是JVM二、学习jvm的用途三、常见的jvm四、学习路线 前言 本篇博客是跟随黑马程序员JVM完整教程,全网超高评价,全程干货不拖沓的学习JVM的笔记,若文章中出现相关问题,请指出! 所有博客文件目录索引:博客目录索引(持续更新) 一、什么是JVM 定义:Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处: 一次编写,到处运行:JVM屏蔽了字节码和底层操作系统的差异,对外提供了一致的运行环境。解释的方法执行二进制字节码来达到

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 858

JVM深入学习(一)

1.面试的需要。2.高级程序员需要了解。

2303_77640525的博客 1589

JVM学习笔记

方法区(Method Area)方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊的方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法信息都保存在该区域。静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例存在堆内存中,和方法区无关。栈(Stack)是一种数据结构,程序=数据结构+算法。容量小,存取速度快,适合存储生命周期短的数据,栈中存储变量(称为局部变量),特点是先进后出,使用完后就会销毁;存放对象的引用。堆(Heap)

2401_83703797的博客 741

1. 如何学习JVM

Table of Contents 声明 JVM与学习其他框架的区别 学习方式 国内权威人士 声明 本系列为北京圣思园深入理解JVM读书笔记 JVM与学习其他框架的区别 1. 其他框架大多是应用层技术框架,学习完后马上可以照猫画虎来应用,立竿见影 2. JVM很枯燥,很多理论 3. 应用崩溃时生成的dump文件需要仔细分析 4. 容易遗忘 5.并不能马上应用,很难用...

Kevin的博客 585

JVM学习笔记(1)-JVM总体篇

目录 0 前言 1 Java体系描述 1.1 Java体系构成 1.2 Java平台描述 2 JVM体系描述 2.1 JVM基本概念 2.2 ​​​​​​​JVM运行原理 3 示例 参考 0 前言      最近买了周志明的《深入理解Java虚拟机 JVM高级特性与最佳实践 》,结合网上的相关文章资料,尝试做一套JVM学习笔记,也算整理和巩固。相关引用文章,已罗列在参考篇中,...

wingsing2010的专栏 4699

为什么要学习jvm调优?

在深入探讨为什么要学习JVM调优之前,我们首先需要了解什么是JVM。JVM,全称为Java虚拟机(Java Virtual Machine),是一个抽象计算机的概念,它为Java程序提供了一个与平台无关的执行环境。这意味着为JVM编写的程序可以在任何安装了JVM的设备上运行,而无需进行任何修改。

qq_74011163的博客 1498
上一篇: 【操作系统】计算机语言及编译技术简介
下一篇: 【经验总结】互联万影视门户网及运维方式介绍
wireless_tech
博客等级 码龄16年 23粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值