浅谈设置JVM内存分配的几个妙招 收藏

【宠物识别系统】设计框架 能跑通的 Demo。收集 10,000 张同品种但不同个体的图片。训练ArcFace模型,验证准确率能否达到 99% 以上。搭建Milvus向量数据库。开发移动端 App/小程序。加入“图像质量检测”和“用户反馈纠错”功能。你是更偏向于做软件服务(如寻宠App、保险API),还是做软硬结合的产品(如智能喂食器)?这决定了我们下一步是深挖云端高并发架构,还是边缘端模型压缩。更偏向于软件,应用更广泛些,继续既然专注于纯软件/SaaS (Software as a Service) 方向。 阅读详情

  浅谈设置JVM内存分配的几个妙招 收藏


一、设置JVM内存设置
 
1. 设置JVM内存的参数有四个:
 
-Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
 
-Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
 
-Xmn    Java Heap Young区大小,不熟悉最好保留默认值;
 
-Xss    每个线程的Stack大小,不熟悉最好保留默认值;
 
2. 如何设置JVM内存分配:
 
(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):
 
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test
 
(2)当在集成开发环境下(如eclipse)启动并使用JVM时:
 
a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):
 1.-vmargs  2.-Xms40m  3.-Xmx256m 
-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
 
此处设置的参数值可以通过以下配置在开发工具的状态栏显示:
 
在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true
 
修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:
 1.-debug  2.options  3.-vm  4.javaw.exe 
重新启动eclipse,就可以看到下方状态条多了JVM信息。
 
b. 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)
 
编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m
 
c. 打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)
 
选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m
 
注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:
 
开发环境的设置为:-Xmx256m,而类Test的设置为:-Xmx128m -Xms64m,则运行Test时生效的设置为:
 
-Xmx256m -Xms64m
 
(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):
 
a. 设置环境变量:
 
变量名:CATALINA_OPTS
 
变量值:-Xmx128m -Xms64m -Xmn32m -Xss16m
 
b. 打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m
 
二、查看设置JVM内存信息
 
Runtime.getRuntime().maxMemory();  //最大可用内存,对应-Xmx
 
Runtime.getRuntime().freeMemory();  //当前JVM空闲内存
 
Runtime.getRuntime().totalMemory();  //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和
 
关于maxMemory(),freeMemory()和totalMemory():
 
maxMemory()为JVM的最大可用内存,可通过-Xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;
 
totalMemory()为当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和,会随着JVM使用内存的增加而增加;
 
freeMemory()为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,而JVM实际可用内存并不等于freeMemory(),而应该等于maxMemory()-totalMemory()+freeMemory()。及其设置JVM内存分配。

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。
 
PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。
 
GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误
 
Java Heap分为3个区
1.Young
2.Old
3.Permanent
 
Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。
 
JVM的Heap分配可以使用-X参数设定,
 
-Xms
初始Heap大小

-Xmx
java heap最大值 

-Xmn
young generation的heap大小

JVM有2个GC线程
第一个线程负责回收Heap的Young区
第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?
 
有如下原因:
1.程序内调用了System.gc()或Runtime.gc()。
2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
3.Java的Heap太小,一般默认的Heap值都很小。
4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。
 
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间
 
经验之谈:
 
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。
 
注意:
 
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
 
Stack的设定
每个线程都有他自己的Stack。
 
-Xss
每个线程的Stack大小

Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
 
硬件环境
 
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。
 
4种GC
 
1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
 
单文件的JVM内存进行设置
 
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
 
tomcat启动jvm内存设置
 
Linux:
 
在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin/tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:
 
修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/JavaOptions
 
原值为
 
-Dcatalina.home="C:/ApacheGroup/Tomcat 5.0"
-Djava.endorsed.dirs="C:/ApacheGroup/Tomcat 5.0/common/endorsed"
-Xrs加入 -Xms300m -Xmx350m

重起tomcat服务,设置生效
 
weblogic启动jvm内存设置
 
在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。
 
JBoss
 
默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"
 
Eclipse

在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大
 
Websphere

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/mikie_hi/archive/2009/12/11/4986943.aspx

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定 本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。 阅读详情

相关推荐

博途WinCC多语言项目配置指南

在博途(TIA Portal)中为WinCC项目配置多语言功能,需通过系统化步骤实现界面文本的动态切换。

dhaimo的博客 2471

浅谈设置JVM内存分配的几个妙招

一、设置JVM内存设置1. 设置JVM内存的参数有四个:-Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;-Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;-Xmn    Java Heap Young区大小,不熟悉最好保留默认值;

mikie_hi的专栏 1616

OpenPnP/Arduino - 二手西门子电动飞达的通讯协议解析与实战

本文详细解析了二手西门子电动飞达的通讯协议,并通过Arduino控制板实现与开源贴片平台OpenPnP的集成。文章涵盖了硬件接口定义、协议帧结构分析、Arduino控制实战、OpenPnP集成技巧以及二手飞达翻新指南,为开发者提供了全面的技术指导和实战经验。

weixin_30411819的博客 201

CDAGs在高性能计算中的应用与优化实践

计算有向无环图(CDAGs)是高性能计算中的核心抽象模型,通过将复杂计算分解为独立任务节点并明确数据依赖关系,显著提升并行计算效率。其原理基于任务节点的原子化计算和依赖边的精确表达,特别适合矩阵运算等数据流密集型场景。在技术价值层面,CDAGs不仅提供了显式并行化能力,还能优化内存局部性和计算资源利用率。以Strassen算法为例,通过CDAGs实现可将矩阵乘法的时间复杂度从O(n³)降至O(n².⁸⁰⁧),同时支持混合精度计算和异构架构调度。Julia语言凭借其元编程特性和高性能表现,成为实现CDAGs的

weixin_30813225的博客 686

用树莓派搭建全功能NAS服务器(01):树莓派基础操作&OMV搭建

写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体。如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了。 在这个系列中我们尽量跳过一些枯燥的理论知识,专注于说明两件事:   1.NAS是什么&能做什么 2.搭建思路&怎么做   这中间也会涉及到一些方案的选择,同类方案我也会列出来和大家分享我已知的优缺点,有兴趣可以多种尝试。(侧重于软件) 虽然是用树莓派搭建的,但是对于debian linux系统下的NAS搭建有着很好的参

斯塔克家的真维斯的工作间 2万+

Mit6.S081-实验1-Xv6 and Unix utilities

Mit6.S081-实验1-Xv6 and Unix utilities前言一、Boot xv61,实验目的2,操作流程1)切换到xv6-labs-2020代码库的lab1分支2)启动xv63)测试xv64)过程分析5)其他操作二、在xv6中添加一个自己编写的程序1,源码准备2,编译配置3,测试添加程序4,过程分析三、xv6中shell简析 前言 一、Boot xv6 1,实验目的 利用qemu启动xv6 2,操作流程 1)切换到xv6-labs-2020代码库的lab1分支 git checkout ut

code a better life~ 36万+

在windows系统中设置JVM(Java虚拟机)的内存

在windows系统中设置JVM(Java虚拟机)的内存

qq_43679849的博客 8117

ABA分析方法 — 软硬件开发必备的一种分析问题绝佳套路

可能你从很多地方听过这个名词,无论是在软件开发还是硬件领域(比较典型的领域:汽车、消费电子、医疗等行业),ABA验证都是一种快速分析故障的一个方法,第一次听到这个词,当时是不是一脸懵逼,本文就深度带你了解下ABA的分析方法。简要概述就是:怀疑A模块导致系统故障,将B模块替换A模块,故障消失,再将A模块替换回来,故障复现,则说明A模块是导致系统故障的原因其实,ABA分析问题,可能很多人在工作中都或多或少用过这个方法,只是没有这个概念,说明白了就是控制变量和对比验证,没什么高大上的东西。

Eureka1024的博客 7328

jvm优化(二)JVM 内存大小设置

JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;

drhrht的博客 1602

极化码理论及算法研究4-巴氏参数、GA算法以及matlab仿真

目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 极化码编码 ...

1万+

【逆强化学习-1】学徒学习(Apprenticeship Learning)

逆强化学习算法1:学徒学习。算法原理+算法步骤+代码+仿真:一个基于gym的小车上山的仿真。附赠学徒学习+Q-Table及学徒学习+DQN的全套代码。

体会编程语言独到的美 7494

JVM性能调优:深入堆内存设置与垃圾回收策略

G1垃圾回收器是JDK 7及以后版本中引入的一种新的垃圾回收器,它结合了并行垃圾回收器和CMS垃圾回收器的优点。在垃圾回收过程中,G1垃圾回收器会优先回收包含垃圾最多的区域,从而提高了垃圾回收的效率。CMS垃圾回收器是一种低延迟的垃圾回收器,它主要关注于减少垃圾回收时的停顿时间。通过合理的堆内存设置和选择合适的垃圾回收策略,我们可以提高JVM的性能,确保Java应用程序的高效、稳定运行。由于只有一个线程执行垃圾回收任务,因此它的效率相对较低,但在内存资源有限的情况下,它可能是一个不错的选择。

铭渊老黄 1120

故障排查:OpenClaw 更新后 feishu 插件路径失效的解决方法

OpenClaw 更新后 feishu 插件路径失效的解决方法发现问题→ Gateway 启动失败,报插件路径错误定位原因→ OpenClaw 目录结构变化,→解决问题→ 更新为正确的路径验证修复→ 使用确认一切正常。

刘一说的IT专栏 1304

Linux与JVM的内存关系分析

引言在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约...

ifeves的博客 189

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VB摄像头监控

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

如何优化JVM内存分配?

如何优化JVM内存分配?

chenyong6301567的博客 604

Statistics and Machine Learning Toolbox

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

怎么合理设置JVM内存分配的比例

JVM内存大小应该如何设置

泡^泡 2800

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

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

JVM的OPTS优化配置指南

VM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 VM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理...

cczakai的专栏 351

微服务之JVM调优

1. maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下能从操作系统那里挖到的最大的内存。系统的可用物理内存限制。随着-Xmx的加大,空闲的内存数就更少,那么可以创建的线程也就更少,同时在JDK1.7和1.8版本不同下,可创建的线程数也会根据每个线程的内存大小不同而不同。

swebin的专栏 1458

Java修改JVM内存大小整理。(java heap space 解决方案)

JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度都会影响程序的性能;Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。有以下几种方法可以选用:第一种 环境myeclipse修改在菜单window->preferecces.在JDK对话框中输入-Xms512m -Xmx1024m这个参数就可以了。如图:

小而美 3万+

JVM的Heap的内存调优,并通过调节Heap的大小实现OOM异常

IDEA上调节JVM的大小 参数:-Xms:初始的堆内存的容量大小(默认电脑内存的1/64) -Xmx:最大堆内存的大小,(默认电脑内存容量的1/4) 代码查看:初始JVM的内存大小: package com.thekingqj; import org.omg.SendingContext.RunTime; import java...

私は悪い人ですか的博客 569

JAVA系列之JVM内存调优

如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。堆内存是由年轻代和老年代构成,JDK1.8以后,永久代被元空间取代,使用直接内存,不占用堆内存。**-XX:+UseAdaptiveSizePolicy:**设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。**-Xss128k:**设置每个线程的堆栈大小。

sloveb123的博客 4508

JVM内存设置

对于jvm的设置我一直知道的很少,有时候遇到outOfMemoryError只会一个简单的设置“-Xms256m -Xmx512m”。有几个问题一直没搞明白:1、jvm的内存大小究竟应该设置成多少最合适?2、jvm的默认大小是多少?3、jvm参数有哪些?哪些参数都表示什么意思?现在的服务器配置一般都是十几个CPU、十几个内存,如何设置才最合适?在网上搜索了一下:对于问题1:jvm堆不是越大越好的,一般最大设置到1G-1.5G就完全足够了,如果总是出现内存溢出,一般是应用有问题了。

m0_67391870的博客 5110

java+heap大小_JVM内存大小设置(java heap space)

一般情况下java程序容易出现java heap space 的错误提示,这个问题就是JVM的堆内存问题,因为其初始值非常小,所以在不够用的情况下要进行设置。当然要确保你的程序正确,做的不是无限循环之类的无用功。在运行该程序时设置如下:java -Xmx1g -Xms1g application-Xmx1g 设置最大可用内存为1g-Xms1g 设置内存初始化最小值1g后面application为...

weixin_39724441的博客 1458

查看TOMCAT内存使用情况(JSP)

您可以用把下列代码放在一个JSP文件中,如写入memory.jsp,放到你的TOMCAT下的任何一应用中,就可以看到你的TOMCAT总大可使用多少内存,已经使用了多少. [code="java"] JVM memory [/code] 同样也可以进入tomcat管理页面,查看内存使用情况,但是平常在生产环境都禁掉了管理员登录页...

u012925172的博客 819

JVM 中的内存如何分配及相应的命令设置

JVM 中的内存如何分配及相应的命令设置

timchen525的专栏 4497

springMVC实现 如何通过TOMCAT访问WEB-INF下的JSP文件

楼主是maven项目,平时若将jsp文件放入webapp(未放入WEB-INF下),tomcat访问时只需http://127.0.0.1:8080/myHadoop/login.jsp即http://主机地址:端口号/项目名/文件名.jsp   即可访问然而,若将jsp文件放在WEB-INF目录下,则访问无法通过地址栏的输入进行访问因此本文旨在介绍如何用springMVC实现访问WEB-INF下...

guaidaojx的博客 1万+
上一篇: LOG4J的配置..
下一篇: Log4j更多的收集二
blueman2012
博客等级 码龄16年 35粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值