9. JVM常用参数

1 常用参数

1.1 内存相关参数

1.1.1 参数说明
  • -Xms设置堆的最小空间大小。
  • -Xmx设置堆的最大空间大小。
  • -Xss设置每个线程的堆栈大小。
  • -XX:NewSize设置新生代最小空间大小。
  • -XX:MaxNewSize设置新生代最大空间大小。
  • -XX:PermSize/-XX:MetaspaceSize设置永久代/元空间最小空间大小。
  • -XX:MaxPermSize/-XX:MaxMetaspaceSize设置永久代/元空间最大空间大小。
  • -XX:NewRatio设置年轻代和年老代的比值。
  • -XX:SurvivorRatio年轻代中 Eden 区与两个 Survivor 区的比值。
  • -XX:TargetSurvivorRatio设置survivor区的可使用率,当survivor区的空间使用率达到这个值时,会将对象送入到老年代。
1.1.2 参数内存关系图

在这里插入图片描述

1.2 GC调优参数

1.2.1 基础参数
  • -XX:+PrintGC允许打印 GC 日志。
  • -Xloggc:filename设置 GC 日志的下载路径。
  • -XX:+PrintGCDateStamps允许在每个GC上打印日期戳。
  • -XX:+PrintGCDetails打印GC详细内容。
  • -XX:MaxTenuringThreshold设置对象从新生代进入老年代的年龄的最大值。
  • -XX:+PrintTenuringDistribution打印对象的年龄。
  • -XX:+HeapDumpOnOutOfMemoryError发生java.lang.OutOfMemoryError时会下载堆文件到当前目录。
  • -XX:HeapDumpPath开启了-XX:+HeapDumpOnOutOfMemoryError选项时,设置堆文件的存储路径及文件名称。
  • -XX:+UseSerialGC在新生代和老年代中都使用串行垃圾收集器。
  • -XX:TargetSurvivorRatio设置survivor区的可使用率,当survivor区的空间使用率达到这个值时,会将对象送入到老年代。
  • -XX:+DisableExplicitGC禁用System.gc()。
1.2.2 并行回收器相关参数
  • -XX:+UseParNewGC在新生代使用并行收集器。
  • -XX:+UseParallelOldGC老年代使用并行回收收集器。
  • -XX:ParallelGCThreads设置用于垃圾回收的线程数,通常情况下可以和CPU数量相等。但在CPU数量比较多的情况下,设置相对较小。
  • -XX:MaxGCPauseMillis设置最大垃圾收集停顿时间。他的值是一个大于0的整数,在收集器工作时,会调整JAVA堆大小或则其他一些参数,尽可能地把停顿时间控制在MaxGCPauseMillls以内。
  • -XX:+UseAdaptiveSizePolicy自适应GC策略。它会自动调整新生代大小,eden, survivor的比例,晋升年老对象年龄等来达到平衡点。
1.2.3 CMS 回收器相关参数
  • -XX:+UseConcMarkSweepGC新生代使用并行收集器,老年代使用CMS+串行收集器。
  • -XX:ParallelCMSThreads设置CMS线程数量。官网jdk8中未找到该参数,未验证。
  • -XX:CMSInitiatingOccupancyFraction设置CMS在老年代空间被使用多少后触发.默认为68%。
  • -XX:+UseCMSCompactAtFullCollection设置CMS收集器在完成垃圾收集后是否进行一次内存碎片整理。官网jdk8中未找到该参数,未验证。
  • -XX:CMSFullGCsBeforeCompaction设定进行多少次CMS垃圾回收后, 进行一次内存压缩。
  • -XX:+CMSClassUnloadingEnabled:允许对类元数据区进行回收。
1.2.4 G1 回收器相关参数
  • -XX:+UseG1GC启用 G1 回收器。

2 官网资料

2.1 官网地址

JVM参数官网地址

网页引导过程:官网 -> Reference -> Java SE Tools Reference for UNIX -> 5 Create and Build Applications -> java

2.2 参数命令分类

  • Boolean类型

格式:-XX:[±] +或-表示启用或者禁用name属性,如:-XX:+UseConcMarkSweepGC表示启用 CMS 垃圾回收器。

  • 非Boolean类型

格式:-XX=表示name属性的值是value,如:XX:MaxGCPauseMillis=500表示最大垃圾收集停顿时间为500毫秒。

2.3 标准选项(Standard Options)

所有虚拟机都支持标准选项,不会因为使用不同虚拟机导致标准选项不一致。标准选项通常用于日常的工作中,如查看JAVA版本、环境变量路径等内容。

标准选项使用 -开始。

Standard options are guaranteed to be supported by all implementations of the Java Virtual Machine (JVM). They are used for common actions, such as checking the version of the JRE, setting the class path, enabling verbose output, and so on.

2.3.1 常用示例
  • -help

显示Java命令的参数选项

Displays usage information for the java command without actually running the JVM.

  • -jar filename

运行一个jar文件。

Executes a program encapsulated in a JAR file. The filename argument is the name of a JAR file with a manifest that contains a line in the form Main-Class:classname that defines the class with the public static void main(String[] args) method that serves as your application’s starting point.

  • -version

显示当前版本信息然后退出。

Displays version information and then exits. This option is equivalent to the -showversion option except that the latter does not instruct the JVM to exit after displaying version information.

  • -verbose:gc

显示垃圾收集器的事件信息

Displays information about each garbage collection (GC) event.

2.4 非标准选项(Non-Standard Options)

非标准选项是特定于Java HotSpot虚拟机的通用选项,因此不能保证所有JVM实现都支持。

非标准选项使用-X开始。

Non-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change. These options start with -X.

2.4.1 常用示例
  • -X

显示所有的可用的-X的选项

Displays help for all available -X options.

  • -Xmn

设置内存堆中年轻代的初始大小和最大大小,单位可以为k/K/m/M/g/G。Oracle建议将年轻代的大小保持在整个堆大小的一半到四分之一之间。

替代参数:可以使用-XX:NewSize设置初始大小,使用-XX:MaxNewSize设置最大大小。

Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery). Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes.

The young generation region of the heap is used for new objects. GC is performed in this region more often than in other regions. If the size for the young generation is too small, then a lot of minor garbage collections will be performed. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size.

Instead of the -Xmn option to set both the initial and maximum size of the heap for the young generation, you can use -XX:NewSize to set the initial size and -XX:MaxNewSize to set the maximum size.

  • -Xms

设置堆的初始大小,必须是1024k的整数且必须大于1M,单位可以为k/K/m/M/g/G。

不进行任何设置时,默认大小为系统内存的1/64,最大为1G。参考官网描述

替代参数:可以使用-XX:NewSize选项替换。

Sets the initial size (in bytes) of the heap. This value must be a multiple of 1024 and greater than 1 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes.

If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation. The initial size of the heap for the young generation can be set using the -Xmn option or the -XX:NewSize option.

  • -Xmx

设置堆的最大大小,必须是1024k的整数且必须大于2M,通常的堆的初始大小(-Xms)和最大大小(-Xmx)设置成相同的值。单位可以为k/K/m/M/g/G。

不进行任何设置时,默认大小为系统内存的1/4,最大为1G。参考官网描述

替代参数:可以使用-XX:MaxHeapSize选项替换。

Specifies the maximum size (in bytes) of the memory allocation pool in bytes. This value must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments, -Xms and -Xmx are often set to the same value.

  • -Xss

设置线程堆栈大小,单位可以为k/K/m/M/g/G。

替代参数:可以使用-XX:ThreadStackSize选项替换。

Sets the thread stack size (in bytes). Append the letter k or K to indicate KB, m or M to indicate MB, g or G to indicate GB. The default value depends on the platform:

  • Linux/ARM (32-bit): 320 KB
  • Linux/i386 (32-bit): 320 KB
  • Linux/x64 (64-bit): 1024 KB
  • OS X (64-bit): 1024 KB
  • Oracle Solaris/i386 (32-bit): 320 KB
  • Oracle Solaris/x64 (64-bit): 1024 KB
  • -Xverify:mode

禁用字节码验证功能,不建议禁用验证,可能会导致运行出错。

Sets the mode of the bytecode verifier. Bytecode verification ensures that class files are properly formed and satisfy the constraints listed in section 4.10, Verification of class Files in the The Java Virtual Machine Specification.

Do not turn off verification as this reduces the protection provided by Java and could cause problems due to ill-formed class files.

Possible mode arguments for this option include the following:

  • remote : Verifies all bytecodes not loaded by the bootstrap class loader. This is the default behavior if you do not specify the -Xverify option.
  • all : Enables verification of all bytecodes.
  • none : Disables verification of all bytecodes. Use of -Xverify:none is unsupported.
  • -Xloggc:filename

设置 GC 日志的下载路径。

Sets the file to which verbose GC events information should be redirected for logging. The information written to this file is similar to the output of -verbose:gc with the time elapsed since the first GC event preceding each logged event. The -Xloggc option overrides -verbose:gc if both are given with the same java command.Example:-Xloggc:garbage-collection.log.

2.5 高级选项(Advanced Runtime Options)

高级选项对于各个虚拟机中的实现差异较大,该参数更多用于系统调优。

高级选项使用-XX开始。

Advanced options are not recommended for casual use. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters. They are also not guaranteed to be supported by all JVM implementations, and are subject to change. Advanced options start with -XX.

2.5.1 常用示例
  • -XX:+DisableAttachMechanism

禁用常用JAVA自带工具,默认是未禁用的,即默认可以使用jcmd,jstack,jmap,jinfo等工具,不建议使用该参数。

Enables the option that disables the mechanism that lets tools attach to the JVM. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as jcmd, jstack, jmap, and jinfo.

  • -XX:ErrorFile=filename

运行发生不可恢复错误时写入错误数据的路径和文件名。文件默认生成在与进程文件同级目录下,如果当前文件夹下未找到文件,可尝试从/tmp目录中寻找。

Specifies the path and file name to which error data is written when an irrecoverable error occurs. By default, this file is created in the current working directory and named hs_err_pidpid.log where pid is the identifier of the process that caused the error. The following example shows how to set the default log file (note that the identifier of the process is specified as %p):-XX:ErrorFile=./hs_err_pid%p.log .

If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system. The temporary directory is /tmp.

  • -XX:ThreadStackSize=size

设置线程堆栈大小,单位可以为k/K/m/M/g/G。

替代参数:可以使用-Xss选项替换。

Sets the thread stack size (in bytes). Append the letter k or K to indicate KB, m or M to indicate MB, g or G to indicate GB. The default value depends on the platform:

  • Linux/ARM (32-bit): 320 KB
  • Linux/i386 (32-bit): 320 KB
  • Linux/x64 (64-bit): 1024 KB
  • OS X (64-bit): 1024 KB
  • Oracle Solaris/i386 (32-bit): 320 KB
  • Oracle Solaris/x64 (64-bit): 1024 KB

2.6 可服务性选项(Advanced Serviceability Options)

可服务性选项更多用于系统调优。

可服务性选项使用-XX开始。

These options provide the ability to gather system information and perform extensive debugging.

2.6.1 常用示例
  • -XX:+CMSClassUnloadingEnabled

允许 CMS 回收器对类进行卸载(元空间的垃圾回收)。默认为开启状态。

Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector. This option is enabled by default. To disable class unloading for the CMS garbage collector, specify -XX:-CMSClassUnloadingEnabled.

  • -XX:+HeapDumpOnOutOfMemoryError

发生java.lang.OutOfMemoryError时会下载堆文件到当前目录,需要改变文件存储目录可以使用-XX:HeapDumpPath选项进行设置。默认情况下该选项未开启。

Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a java.lang.OutOfMemoryError exception is thrown. You can explicitly set the heap dump file path and name using the -XX:HeapDumpPath option. By default, this option is disabled and the heap is not dumped when an OutOfMemoryError exception is thrown.

  • -XX:HeapDumpPath=path

开启了-XX:+HeapDumpOnOutOfMemoryError选项时,设置堆文件的存储路径及文件名称。

Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the -XX:+HeapDumpOnOutOfMemoryError option is set. By default, the file is created in the current working directory, and it is named java_pidpid.hprof where pid is the identifier of the process that caused the error. The following example shows how to set the default file explicitly (%p represents the current process identificator):-XX:HeapDumpPath=./java_pid%p.hprof

2.7 垃圾收集器相关选项(Advanced Garbage Collection Options)

垃圾收集器相关选项,用于垃圾收集相关的性能调优。

可服务性选项使用-XX开始。

These options control how garbage collection (GC) is performed by the Java HotSpot VM.

2.7.1 常用示例
  • -XX:CMSInitiatingOccupancyFraction=percent

设置CMS回收器在老年代空间使用率阈值,默认为68,即达到老年代内存使用的68%时,会执行一次CMS回收。

Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle. The default value is set to -1. Any negative value (including the default) implies that -XX:CMSTriggerRatio is used to define the value of the initiating occupancy fraction.The following example shows how to set the occupancy fraction to 20%:-XX:CMSInitiatingOccupancyFraction=20

  • -XX:ConcGCThreads=threads

设置执行并发GC的线程数

Sets the number of threads used for concurrent GC. The default value depends on the number of CPUs available to the JVM.For example, to set the number of threads for concurrent GC to 2, specify the following option:-XX:ConcGCThreads=2

  • -XX:+DisableExplicitGC

启动禁用System.gc()。默认情况下是禁用状态,即默认是会处理System.gc()的执行。

Enables the option that disables processing of calls to System.gc(). This option is disabled by default, meaning that calls to System.gc() are processed. If processing of calls to System.gc() is disabled, the JVM still performs GC when necessary.

  • -XX:G1HeapRegionSize=size

设置G1垃圾收集器中的regions的大小,该大小在1M ~ 32M 之间。

Sets the size of the regions into which the Java heap is subdivided when using the garbage-first (G1) collector. The value can be between 1 MB and 32 MB. The default region size is determined ergonomically based on the heap size.The following example shows how to set the size of the subdivisions to 16 MB:-XX:G1HeapRegionSize=16m

  • -XX:InitialHeapSize=size

设置初始堆大小,该值必须为0或者是1024k的倍数并大于1M。

Sets the initial size (in bytes) of the memory allocation pool. This value must be either 0, or a multiple of 1024 and greater than 1 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration.

If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation. The size of the heap for the young generation can be set using the -XX:NewSize option.

  • -XX:MaxGCPauseMillis=time

设置最大 GC 停顿时间,单位毫秒。

Sets a target for the maximum GC pause time (in milliseconds). This is a soft goal, and the JVM will make its best effort to achieve it. By default, there is no maximum pause time value.The following example shows how to set the maximum target pause time to 500 ms:-XX:MaxGCPauseMillis=500.

  • -XX:MaxHeapSize=size

设置最大堆内存空间。该值必须是1024k的倍数并大于2M。

Sets the maximum size (in byes) of the memory allocation pool. This value must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments, -XX:InitialHeapSize and -XX:MaxHeapSize are often set to the same value.

The -XX:MaxHeapSize option is equivalent to -Xmx.

  • -XX:MaxMetaspaceSize=size

设置最大元空间大小。

Sets the maximum amount of native memory that can be allocated for class metadata. By default, the size is not limited. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system.

  • -XX:MaxNewSize=size

设置新生代的最大空间

Sets the maximum size (in bytes) of the heap for the young generation (nursery). The default value is set ergonomically.

  • -XX:MaxTenuringThreshold=threshold

设置垃圾从新生代进入老年代的年龄的最大值。每次Minor GC 后,对象年龄加1。任何大于这个年龄的对象,一定会进入到老年代。默认年龄是15,CMS收集器默认是6。

Sets the maximum tenuring threshold for use in adaptive GC sizing. The largest value is 15. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.The following example shows how to set the maximum tenuring threshold to 10:-XX:MaxTenuringThreshold=10.

  • -XX:MetaspaceSize=size

设置元空间大小,设置该选项后初始大小与最大大小相同。

Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used. The default size depends on the platform.

  • -XX:NewRatio=ratio

设置老年代与新生代的比例大小,它等于老年代大小除以新生代大小。默认值是2,即老年代与新生代比例是2:1。

Sets the ratio between young and old generation sizes. By default, this option is set to 2. The following example shows how to set the young/old ratio to 1:-XX:NewRatio=1.

  • -XX:NewSize=size

设置内存堆中年轻代的初始大小和最大大小,单位可以为k/K/m/M/g/G。Oracle建议将年轻代的大小保持在整个堆大小的一半到四分之一之间。

Sets the initial size (in bytes) of the heap for the young generation (nursery). Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes.

The young generation region of the heap is used for new objects. GC is performed in this region more often than in other regions. If the size for the young generation is too low, then a large number of minor GCs will be performed. If the size is too high, then only full GCs will be performed, which can take a long time to complete. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size.

The -XX:NewSize option is equivalent to -Xmn.

  • -XX:ParallelGCThreads=threads

设置并行收集器的线程数。

Sets the number of threads used for parallel garbage collection in the young and old generations. The default value depends on the number of CPUs available to the JVM.For example, to set the number of threads for parallel GC to 2, specify the following option:-XX:ParallelGCThreads=2.

  • -XX:+PrintGC

允许打印GC日志,默认情况下该选项是禁止的。

Enables printing of messages at every GC. By default, this option is disabled.

  • -XX:+PrintGCDateStamps

允许在每个GC上打印日期戳。

Enables printing of a date stamp at every GC. By default, this option is disabled.

  • -XX:+PrintGCDetails

打印GC详细内容。

Enables printing of detailed messages at every GC. By default, this option is disabled.

  • -XX:+PrintTenuringDistribution

打印对象的年龄。

Enables printing of tenuring age information. The following is an example of the output:

  • -XX:SurvivorRatio=ratio

设置新生代中 eden 区与 survivor 区大小的比例。默认下比例为8,即默认情况下,eden/survivor空间大小为8:2。

Sets the ratio between eden space size and survivor space size. By default, this option is set to 8. The following example shows how to set the eden/survivor space ratio to 4:-XX:SurvivorRatio=4

  • -XX:TargetSurvivorRatio=percent

设置survivor区的可使用率,当survivor区的空间使用率达到这个值时,会将对象送入到老年代。默认下使用率值为50%。

Sets the desired percentage of survivor space (0 to 100) used after young garbage collection. By default, this option is set to 50%.The following example shows how to set the target survivor space ratio to 30%:-XX:TargetSurvivorRatio=30

  • -XX:+UseAdaptiveSizePolicy

使用自适应 GC 策略,默认是打开的。

Enables the use of adaptive generation sizing. This option is enabled by default. To disable adaptive generation sizing, specify -XX:-UseAdaptiveSizePolicy and set the size of the memory allocation pool explicitly (see the -XX:SurvivorRatio option).

  • -XX:+UseConcMarkSweepGC

启用 CMS 垃圾收集器作为老年代垃圾收集器。

Enables the use of the CMS garbage collector for the old generation. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (-XX:+UseParallelGC) garbage collector. The G1 garbage collector (-XX:+UseG1GC) is another alternative.

By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM. When this option is enabled, the -XX:+UseParNewGC option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8: -XX:+UseConcMarkSweepGC -XX:-UseParNewGC.

  • -XX:+UseG1GC

使用G1作用新生代与老年代的垃圾收集器。G1作用垃圾收集器推荐在内存大于6G的设备下使用。

Enables the use of the garbage-first (G1) garbage collector. It is a server-style garbage collector, targeted for multiprocessor machines with a large amount of RAM. It meets GC pause time goals with high probability, while maintaining good throughput. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0.5 seconds).

By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM.

  • -XX:+UseParallelGC

在新生代中使用 Parallel 垃圾收集器。

Enables the use of the parallel scavenge garbage collector (also known as the throughput collector) to improve the performance of your application by leveraging multiple processors.

By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM. If it is enabled, then the -XX:+UseParallelOldGC option is automatically enabled, unless you explicitly disable it.

  • -XX:+UseParallelOldGC

在老年代中使用 ParallelOld 垃圾收集器。

Enables the use of the parallel garbage collector for full GCs. By default, this option is disabled. Enabling it automatically enables the -XX:+UseParallelGC option.

  • -XX:+UseParNewGC

在新生代中使 ParNew 垃圾收集器,

Enables the use of parallel threads for collection in the young generation. By default, this option is disabled. It is automatically enabled when you set the -XX:+UseConcMarkSweepGC option. Using the -XX:+UseParNewGC option without the -XX:+UseConcMarkSweepGC option was deprecated in JDK 8.

  • -XX:+UseSerialGC

在新生代和老年代中都使用串行垃圾收集器。

Enables the use of the serial garbage collector. This is generally the best choice for small and simple applications that do not require any special functionality from garbage collection. By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM.

2.8 在JDK1.8中不再使用的选项

  • -XX:MaxPermSize=size

设置最大永久代空间,在jdk1.8中去除了永久代,使用了元空间(Metaspace)进行替代。

Sets the maximum permanent generation space size (in bytes). This option was deprecated in JDK 8, and superseded by the -XX:MaxMetaspaceSize option.

  • -XX:PermSize=size

设置永久代空间,在jdk1.8中去除了永久代,使用了元空间(Metaspace)进行替代。

Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded. This option was deprecated un JDK 8, and superseded by the -XX:MetaspaceSize option.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值