Java虚拟机(JVM)参数配置说明

在Java、J2EE大型应用中,JVM非标准参数的配置直接关系到整个系统的性能。JAVA中文站社区门户O&Z7CJXS*t
JVM非标准参数指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,为了提高性能,往往需要调整这些参数,以求系统达到最佳新能。JAVA中文站社区门户Qqo@SeUdEo*x
另外这些参数的配置也是影响系统稳定性的一个重要因素,相信大多数Java开发人员都见过“OutOfMemory”类型的错误。呵呵,这其中很可能就是JVM参数配置不当或者就没有配置没意识到配置引起的。
)O!N2P#vzMiP
bg&m:CA:veE为了说明这些参数,还需要说说JDK中的命令行工具一些知识做铺垫。JAVA中文站社区门户 F7n ``#P-tar
JAVA中文站社区门户7ed4a'C&q QI
首先看如何获取这些命令配置信息说明:
3f{)V+{!xY,L假设是windows平台,你安装了J2SDK,那么现在你从cmd控制台窗口进入J2SDK安装目录下的bin目录,然后运行java命令,出现如下结果,这些就是包括java.exe工具的和JVM的所有命令都在里面。JAVA中文站社区门户r g3G,OMLx@p(J
JAVA中文站社区门户*n#f ` |5O1rF7?~/[TA
-----------------------------------------------------------------------JAVA中文站社区门户[b*]%~-F!ZWUb
D:\j2sdk15\bin>javaJAVA中文站社区门户N.`2` ~,W6e(P
Usage: java [-options] class [args...]JAVA中文站社区门户 wOxg L#ZE
(to execute a class)
/~`&F7w hor java [-options] -jar jarfile [args...]
t(~k5hH!q `(uI(to execute a jar file)
#w.hU$tM.Z/G_JJAVA中文站社区门户*ax;V&vIYc
where options include:JAVA中文站社区门户b_d~:|"|*uQ t
-client to select the "client" VMJAVA中文站社区门户5e+A4{] }s { q7i4BR
-server to select the "server" VM
`*p:zS.|&}QMU"~.wC-hotspot is a synonym for the "client" VM [deprecated]
%@ PW.y%RzY`The default VM is client.
}(eZo,K
Nkqyj xup]O,h-cp JAVA中文站社区门户9~o1p PoL:G VO(V
-classpath
2B$p+~.C{9^K0IC9SA ; separated list of directories, JAR archives,
*n:m.C+i lO Yand ZIP archives to search for class files.
AGl:n NH J-D=
9T8x2@,Cw}set a system propertyJAVA中文站社区门户h*A4i3|9dJ3A ]
-verbose[:class|gc|jni]
)xE$_&TkP0ienable verbose outputJAVA中文站社区门户&S Hpx} O
-version print product version and exitJAVA中文站社区门户\$n6Q5J4W$f;|
-version:JAVA中文站社区门户r!R@7w1NA;S3D
require the specified version to runJAVA中文站社区门户`mm&|L,^*u
-showversion print product version and continue
0@K,P8Nam2q-jre-restrict-search | -jre-no-restrict-search
4^V#S:Ty%d)}-t!WFginclude/exclude user private JREs in the version searchJAVA中文站社区门户N7_2V;HU5j(y]Qb%g?9d
-? -help print this help message
|TV\Y p,W9Y/s-X print help on non-standard options
~)]alY6p8N-ea[:...|:]
"]T!y+o!|p*b't~q-enableassertions[:...|:]
:b;MI/A&E^5Denable assertionsJAVA中文站社区门户 i oU.Jr
-da[:...|:]JAVA中文站社区门户2AD{$yC*k!w_Y
-disableassertions[:...|:]JAVA中文站社区门户y8Wq[%T~h
disable assertions
O RJ\B U-esa | -enablesystemassertionsJAVA中文站社区门户7D5R3~.vm$L9[\
enable system assertionsJAVA中文站社区门户e^I6\7S1M)Es
-dsa | -disablesystemassertions
m"FhS%`ee:S0`disable system assertionsJAVA中文站社区门户@vBN-d'O)R
-agentlib:[=]JAVA中文站社区门户 f-H:x?r d:i X+E
load native agent library , e.g. -agentlib:hprof
|#@R5Xo[b)y(U(dsee also, -agentlib:jdwp=help and -agentlib:hprof=helpJAVA中文站社区门户/b T5vw `
-agentpath:[=]
:f.D;a0A j.{it [#xload native agent library by full pathname
:ye7Uh;w ]+wyy-javaagent:[=]
]+Ykd2C IIJ Z(tload Java programming language agent, see java.lang.instrument
(o:RKzZ|)o4^ P3F-----------------------------------------------------------------------JAVA中文站社区门户;n k/T u;q.g
在控制台输出信息中,有个-X(注意是大写)的命令,这个正是查看JVM配置参数的命令。
gz_|3Sp;Pr(aN*D!K'fJAVA中文站社区门户KU0i3ES}cq[c f
其次,用java -X 命令查看JVM的配置说明:JAVA中文站社区门户\&n(]iy[4L9U
运行后如下结果,这些就是配置JVM参数的秘密武器JAVA中文站社区门户.Z7a9W8z vM~+D
-----------------------------------------------------------------------JAVA中文站社区门户@ Z Y-c g%e
D:\j2sdk15\bin>java -XJAVA中文站社区门户;FR3D-? ?Hd n
-Xmixed mixed mode execution (default)JAVA中文站社区门户~5n?b[p ws#}&x
-Xint interpreted mode execution onlyJAVA中文站社区门户p"P~/`!lg
-Xbootclasspath:
$n U/sB{OM-Y+Wset search path for bootstrap classes and resourcesJAVA中文站社区门户 h!D5X0zf
-Xbootclasspath/a:
4VBq xPuappend to end of bootstrap class path
F c2[s5X.k7L#Yx-Xbootclasspath/p:JAVA中文站社区门户ZX@ Bh)ooS2Mn
prepend in front of bootstrap class pathJAVA中文站社区门户+LE|hT!Y
-Xnoclassgc disable class garbage collectionJAVA中文站社区门户U{ G6J:Q(LN-i8R
-Xincgc enable incremental garbage collectionJAVA中文站社区门户9C&\f sA-@ Tt
-Xloggc: log GC status to a file with time stampsJAVA中文站社区门户y _yn#O
-Xbatch disable background compilationJAVA中文站社区门户;Ju7tu pk*E%z
-Xms set initial Java heap sizeJAVA中文站社区门户omB/j@;wF
-Xmx set maximum Java heap sizeJAVA中文站社区门户 WH f Qy&K Z2k
-Xss set java thread stack sizeJAVA中文站社区门户dPith WO$I3H
-Xprof output cpu profiling data
.DE#ml$]X+|Tf@ J-Xfuture enable strictest checks, anticipating future default
^sEDaX*| ?)f-Xrs reduce use of OS signals by Java/VM (see documentation)JAVA中文站社区门户HuxC6W&gb\-WS
-Xcheck:jni perform additional checks for JNI functionsJAVA中文站社区门户)xyHYX2Ys\AS
-Xshare:off do not attempt to use shared class data
)nIrQ }x7{+U!D-h-Xshare:auto use shared class data if possible (default)
8V `\CK6|Y [Y-Xshare:on require using shared class data, otherwise fail.
Rz)K5zk:Qu@
F!l4R ^ v$mThe -X options are non-standard and subject to change without notice.JAVA中文站社区门户#SNA"HT#H
-----------------------------------------------------------------------
3i{ Om:t6?!v`aF!~
CYa A3I9QQJVM配置参数中文说明:JAVA中文站社区门户#q} ahJa6_cs
-----------------------------------------------------------------------
)o9vFW Z5[G)R1、-Xmixed mixed mode execution (default)
XH+x L+cs"K混合模式执行
&t jm@!YS#|5T
)ne C1u6`Z|crz2、-Xint interpreted mode execution onlyJAVA中文站社区门户M lQ'r6|,v.bg
解释模式执行
(K-n"\x P @JAVA中文站社区门户W }4]+Nn9s/?
3、-Xbootclasspath:
C%Y gTLZy"X,A8Rset search path for bootstrap classes and resources
(OE!z E8N`7g设置zip/jar资源或者类(.class文件)存放目录路径JAVA中文站社区门户8fg,Kp Ct;E xh

R+Qp/JwTb!a\J3、-Xbootclasspath/a:
BPl4nVG-Uy6c~append to end of bootstrap class path
S;wch _ ?]p D追加zip/jar资源或者类(.class文件)存放目录路径JAVA中文站社区门户y xMvX,gyD
JAVA中文站社区门户6m JB ?+?8z
4、-Xbootclasspath/p:
s-QN%RR.`,nF-xC/xeprepend in front of bootstrap class path
8~'?7jyA*DR预先加载zip/jar资源或者类(.class文件)存放目录路径
0m^ P{0w1L&HJAVA中文站社区门户E C%gnijd7t
5、-Xnoclassgc disable class garbage collection
^H%}x+b|关闭类垃圾回收功能
1A,kt dC
2d0n*G)H Wc6、-Xincgc enable incremental garbage collection
6\p3M+~ B6k1q开启类的垃圾回收功能JAVA中文站社区门户yBWxE0SXC

X;Kh6P:v#Ly l [1y7、-Xloggc: log GC status to a file with time stamps
*Y xv8q!zT.na记录垃圾回日志到一个文件。
q;t_4[&Z mx
KAtc:C2|8、-Xbatch disable background compilationJAVA中文站社区门户Aqa,{ ~
关闭后台编译JAVA中文站社区门户oF%W%E*~TG:Z.d
JAVA中文站社区门户\ \(E%PN\
9、-Xms set initial Java heap size
WcRW/V.?XP6X设置JVM初始化堆内存大小JAVA中文站社区门户(d fF U {7\.J$bCr
JAVA中文站社区门户O4~!t$]x$rb9`Y$F&i
10、-Xmx set maximum Java heap sizeJAVA中文站社区门户/Y6d `2U!{v
设置JVM最大的堆内存大小JAVA中文站社区门户7jK"PTD$cX

}6T,g bm:I11、-Xss set java thread stack size
:b.yD&GcjE g设置JVM栈内存大小JAVA中文站社区门户dg+P['l

m%X(m6u)y1e6OD"d6I[12、-Xprof output cpu profiling data
9h.?ms8w)Dn.e]8M输入CPU概要表数据JAVA中文站社区门户7o N)^ tf lP
JAVA中文站社区门户E2N@8N'Br
13、-Xfuture enable strictest checks, anticipating future defaultJAVA中文站社区门户5R.u:k3QK5iRI
执行严格的代码检查,预测可能出现的情况
A^R X`JAVA中文站社区门户R,z {&CTdz
14、-Xrs reduce use of OS signals by Java/VM (see documentation)JAVA中文站社区门户6s&Z-dP_.}Cv QTF
通过JVM还原操作系统信号JAVA中文站社区门户pAS/[$o{/v%I PIq
JAVA中文站社区门户 \'yA;P}FSI
15、-Xcheck:jni perform additional checks for JNI functionsJAVA中文站社区门户!}E)o2I _`{g*f
对JNI函数执行检查
m#PpF/Sv^q |JAVA中文站社区门户$j)X;kL1C0~c)X
16、-Xshare:off do not attempt to use shared class dataJAVA中文站社区门户,i'\QJT9S
尽可能不去使用共享类的数据
K:m'd+?*y(`
XR2B#c2eE1|17、-Xshare:auto use shared class data if possible (default)JAVA中文站社区门户-Hk Bl.e
尽可能的使用共享类的数据JAVA中文站社区门户,H6SH8qA-j v]Z

R:@bX*u K18、-Xshare:on require using shared class data, otherwise fail.
Y(?5vi P$DLl尽可能的使用共享类的数据,否则运行失败
[E~ O2jO!p
1H'Qw H%GV4\The -X options are non-standard and subject to change without notice.
m"c]0z)|-----------------------------------------------------------------------
1m`[2cz7L$v._0JvzJAVA中文站社区门户H~wp)H5L6^+UQ j
怎么用这这些参数呢?其实所有的命令行都是这么用,下面是一个简单的HelloWorl的例子来演示这个参数的用法JAVA中文站社区门户.C:tp3UZ%WE
JAVA中文站社区门户%Y*y4o7o`#z V
HelloWorld.javaJAVA中文站社区门户5J @3?&v(I$U(Xa
-----------------------------------------------JAVA中文站社区门户V*_$s Q%j7dc
public class HelloWorld
6y{1XJ AK ~{
y/H)C#q6bl$Wpublic static void main(String[] args)
n{/bW?{JAVA中文站社区门户;V(v$bHa*|/t]1eQ
System.out.println("Hello World!");
:Vv{.?4["^*J.l&~}JAVA中文站社区门户 QX4ITRm;KX)j
}
TH*y`N,IJAVA中文站社区门户"Dp?^Z
编译并运行:
+^ } J:r{:JD:\j2sdk15\bin>javac HelloWorld.javaJAVA中文站社区门户-~h.`6_/V1fYhz
JAVA中文站社区门户xUl tg)wx
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
+a"q])`?Hello World!JAVA中文站社区门户pZ5h|M
JAVA中文站社区门户`K??0_1{2u P
呵呵,这下满足了吧!
:ct E8aj|?
1cu2GS%K)Ct实践:在大型系统或者应用中配置JVM参数JAVA中文站社区门户 |*F8C6C%uS G@
比如配置IDE工具的参数,常见的有IDEA、Eclipse,这个是在一个配置文件中指定即可。JAVA中文站社区门户N|n&d` o#n(B-q:Y|
如果要在J2EE环境中配置这些参数,那么需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,其启动文件中来配置,Tomcat是在catalina.bat中配置,weblogic和websphere是在其他地方 JAVA中文站社区门户(`l2I"eP9~eY
JAVA中文站社区门户i2{u.qg(z^Ynu
几个Java命令行说明,以供参考:
f*z8zn]XAA[uJAVA中文站社区门户]{2v)u&oU i
(1)、javacJAVA中文站社区门户VE:m7e3Lep!O
用法:javac <选项> <源文件>
{(V_/aF.?L其中,可能的选项包括:
-[R uX+G |BE+O-g 生成所有调试信息JAVA中文站社区门户7jqz|L
-g:none 不生成任何调试信息JAVA中文站社区门户Sn'VkW| x:g
-g:{lines,vars,source} 只生成某些调试信息
xx Y hPip H7k-nowarn 不生成任何警告JAVA中文站社区门户h8yX9e9Lp._0GD
-verbose 输出有关编译器正在执行的操作的消息JAVA中文站社区门户Ao&~B-P(ke`-aH
-deprecation 输出使用已过时的 API 的源位置JAVA中文站社区门户h(wg,Wt3I/}
-classpath <路径> 指定查找用户类文件的位置
B)i)n A2Y.A-cp <路径> 指定查找用户类文件的位置JAVA中文站社区门户_5B,S E Fef
-sourcepath <路径> 指定查找输入源文件的位置
:MWX,~5apL-bootclasspath <路径> 覆盖引导类文件的位置JAVA中文站社区门户&Xa jy0p~7`K
-extdirs <目录> 覆盖安装的扩展目录的位置JAVA中文站社区门户7OR?,gxQ
-endorseddirs <目录> 覆盖签名的标准路径的位置JAVA中文站社区门户(t*H'o7HSsm
-d <目录> 指定存放生成的类文件的位置
$@B^J:I-encoding <编码> 指定源文件使用的字符编码JAVA中文站社区门户l-jYnp+~{M R6X o#Z
-source <版本> 提供与指定版本的源兼容性
J7id(f5j0B)^-target <版本> 生成特定 VM 版本的类文件JAVA中文站社区门户 Q#X s4E+W F|
-version 版本信息JAVA中文站社区门户1Z x0GR%g x'J3g?m
-help 输出标准选项的提要JAVA中文站社区门户fK.csg T2~
-X 输出非标准选项的提要
z@9O+MWd%XE-J<标志> 直接将 <标志> 传递给运行时系统
a%L-A"__s9L
|.ry(jV${0R(^ kV(2)、jar
v7i(i#{5eV*L&N用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...JAVA中文站社区门户]N oA9c%oNcrW e
选项:JAVA中文站社区门户E%cQ(R2}S5_,h
-c 创建新的存档JAVA中文站社区门户o+E;["{x;k1N
-t 列出存档内容的列表
vXm Jk-x 展开存档中的命名的(或所有的〕文件JAVA中文站社区门户&Rm9Q8[,U#z1c.R
-u 更新已存在的存档JAVA中文站社区门户6Pa |0~M
-v 生成详细输出到标准输出上JAVA中文站社区门户5r5|L L pJ
-f 指定存档文件名JAVA中文站社区门户|)S6Z8zI a
-m 包含来自标明文件的标明信息JAVA中文站社区门户nE1v^3Y%| ]4\
-0 只存储方式;未用ZIP压缩格式
8SbmK'tU V-`j5j-M 不产生所有项的清单(manifest〕文件JAVA中文站社区门户 ~@8B`\jA/K
-i 为指定的jar文件产生索引信息JAVA中文站社区门户9? R6?;t P9R1@5|
-C 改变到指定的目录,并且包含下列文件:JAVA中文站社区门户D*L,vH*w'Ry`;Z
如果一个文件名是一个目录,它将被递归处理。
\`{vtT清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。JAVA中文站社区门户(M:s S Tw2s'c O+t

9S?)N$kz示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
4s$aK o4K+Ua/i1Ne/pjar cvf classes.jar Foo.class Bar.classJAVA中文站社区门户zbkK!e
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有JAVA中文站社区门户9m+v+k8^bBJ9x"gn
文件存档到一个名为 'classes.jar' 的存档文件中:
YR@t\Gm5e"Pjar cvfm classes.jar mymanifest -C foo/ .
0e;MLaYB!u1r
uaE5f Y)gy&[(3)、javadoc
!kRudh4s9Jjavadoc: 错误 - 未指定软件包或类。JAVA中文站社区门户Z+{:RZb8v [[
用法:javadoc [选项] [软件包名称] [源文件] [@file]JAVA中文站社区门户S,Z)_(|7viJi
-overview <文件> 读取 HTML 文件的概述文档JAVA中文站社区门户Fcg@+m8Q-h!R)h
-public 仅显示公共类和成员JAVA中文站社区门户$^2_D Ve]8D
-protected 显示受保护/公共类和成员(默认)JAVA中文站社区门户kGje4`5k
-package 显示软件包/受保护/公共类和成员
W^s$m9X Z$u|Z-private 显示所有类和成员
/rJ:nn&D4cL-help 显示命令行选项并退出
|r']qm%D6ec-doclet <类> 通过替代 doclet 生成输出
PcB;m%U$nA r.N-docletpath <路径> 指定查找 doclet 类文件的位置
#lS&OY%W;O%PR'U-sourcepath <路径列表> 指定查找源文件的位置
,`z%ZW2Q6_f0IgT-classpath <路径列表> 指定查找用户类文件的位置
k*FE0B[-exclude <软件包列表> 指定要排除的软件包的列表
s1L4LsQ8FI{y-subpackages <子软件包列表> 指定要递归装入的子软件包
c#g5AUMPx-breakiterator 使用 BreakIterator 计算第 1 句
`R?-T/mT/wma-bootclasspath <路径列表> 覆盖引导类加载器所装入的
*`KV uxu类文件的位置JAVA中文站社区门户U9i,f"sd!\3i \
-source <版本> 提供与指定版本的源兼容性
6}A2ilCN@ i-extdirs <目录列表> 覆盖安装的扩展目录的位置JAVA中文站社区门户k:ZcN!Q:OB
-verbose 输出有关 Javadoc 正在执行的操作的消息JAVA中文站社区门户%h+w+t O3j e~A
-locale <名称> 要使用的语言环境,例如 en_US 或 en_US_WINJAVA中文站社区门户_mD,s(oI)oC
-encoding <名称> 源文件编码名称
nF]2S,KK-quiet 不显示状态消息
:ra5iJ'Oop?-J<标志> 直接将 <标志> 传递给运行时系统
-wX-dqX'ez;j}#Z
/f,^K'ebgz,k J通过标准 doclet 提供:
S/|gP @ m7T)@P n-d <目录> 输出文件的目标目录JAVA中文站社区门户r T a:Zp7B
-use 创建类和软件包用法页面JAVA中文站社区门户r*E%h&iEv!r
-version 包含 @version 段JAVA中文站社区门户*{J,LD#\"^
-author 包含 @author 段
t o6C~.O'B-docfilessubdirs 递归复制文档文件子目录
:t|.rR1dO-splitindex 将索引分为每个字母对应一个文件
1fA3m(m_-windowtitle <文本> 文档的浏览器窗口标题
*mn8xh2U5A-doctitle 包含概述页面的标题
/Wi6@O z8o?*E-header 包含每个页面的页眉文本JAVA中文站社区门户g6X y5R1u3lz;@
-footer 包含每个页面的页脚文本JAVA中文站社区门户gd+J Q0O%G E
-bottom 包含每个页面的底部文本
4Pd L9A~\-link 创建指向位于 的 javadoc 输出的链接JAVA中文站社区门户td"Q/E ~&W!T
-linkoffline 利用位于 的软件包列表链接至位于 JAVA中文站社区门户$q$@"m p pbe ]v
的文档
G]6nz:m9o-excludedocfilessubdir <名称 1>:..排除带有给定名称的所有文档文件子目录。JAVA中文站社区门户p]'WH-e
-group <名称> :.. 在概述页面中,将指定的软件包分组JAVA中文站社区门户ems1Bw8y
-nocomment 抑止描述和标记,只生成声明。
4@9^3H'?6?&x-S9{I-nodeprecated 不包含 @deprecated 信息JAVA中文站社区门户 B?M6]D6O
-noqualifier <名称 1>:<名称 2>:...从输出中排除限定符的列表。
"_Hn y(Lc-nosince 不包含 @since 信息JAVA中文站社区门户eb mU}
-notimestamp 不包含隐藏时间戳JAVA中文站社区门户 \7| rx iBC+K4J*~
-nodeprecatedlist 不生成已过时的列表JAVA中文站社区门户#`qk&eO:Z*z\|
-notree 不生成类分层结构
zXt'wz;HknzP-noindex 不生成索引JAVA中文站社区门户pfH%HYi5F"L;\T
-nohelp 不生成帮助链接JAVA中文站社区门户0Sv(I? ~'tf8D
-nonavbar 不生成导航栏
(B0V'e'L P N-serialwarn 生成有关 @serial 标记的警告JAVA中文站社区门户'ErK6\im(^`
-tag <名称>:<位置>:<标题> 指定单个变量自定义标记JAVA中文站社区门户 O_(Yt$mwkP,a
-taglet 要注册的 Taglet 的全限定名称JAVA中文站社区门户3W(S @aj-_?-H
-tagletpath Taglet 的路径JAVA中文站社区门户 K*Ef}H%B G
-charset <字符集> 用于跨平台查看生成的文档的字符集。
XRi2[ur\#d.S)F-helpfile <文件> 包含帮助链接所链接到的文件JAVA中文站社区门户/HXw6}(K{ Gu
-linksource 以 HTML 格式生成源
K!_slWP-sourcetab <制表符长度> 指定源中每个制表符占据的空格数
BUuJT^-keywords 使软件包、类和成员信息附带 HTML 元标记JAVA中文站社区门户V#o/_0T"f9ZWl Ys
-stylesheetfile <路径> 用于更改生成文档的样式的文件JAVA中文站社区门户Bc R ]3_
-docencoding <名称> 输出编码名称
7i1n]5G:g$j k |k3xS @
$s4g8Z3Y(lS"_(4)、rmid
T#U q-Z/w Y'S5]rmid: 非法选项:-?JAVA中文站社区门户%hc:k| x Q1VX%V
用法:rmid
@,B;C {Z2cn r'W|其中, 包括:JAVA中文站社区门户3{[a&r1^:[2p x4r
-port 指定供 rmid 使用的端口JAVA中文站社区门户EIdN MlR*^}
-log 指定 rmid 将日志写入的目录JAVA中文站社区门户c'sl^\]t,kq ~
-stop 停止当前的 rmid 调用(对指定端口)JAVA中文站社区门户KR}9s8N%E,X%[
-C 向每个子进程传递参数(激活组)
3M,ZBz\[j(b;~-J 向 java 解释程序传递参数

你可能感兴趣的:(java)