精华内容
下载资源
问答
  • 用java -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一...

    用java命令查看。

    用java -option进行修改参数。

    还有tomcat,eclipse启动时通过配置文件加载的。

    详细如下:

    安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。

    一、配置JVM内存

    1.配置JVM内存的参数

    -XmxJavaHeap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

    -XmsJavaHeap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

    2.如何配置JVM内存分配:

    (1)当在命令提示符下启动并使用JVM时(只对当前运行的类生效)

    java-Xmx128m-Xms64m-Xmn32m-Xss16mTest

    (2)当在集成开发环境下(如eclipse)启动并使用JVM时:

    第一种设置方法:

    在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):

    -vmargs-Xms40m-Xmx256m-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

    此处设置的参数值可以通过以下配置在开发工具的状态栏显示:

    在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true

    修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:

    -debugoptions-vmjavaw.exe重新启动eclipse,就可以看到下方状态条多了JVM信息。

    第二种设置方法:

    打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)

    编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m

    第三种设置方法:

    打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)

    选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m

    注:如果在同一开发环境中同时进行了第二种和第三种设置,则第二种设置生效,第三种设置无效,如:

    开发环境的设置为:-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 -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一...

    0df1d994177783b214720e6ab63e8b2f.png

    暮色呼如

    用java命令查看。用java -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。一、配置JVM内存1.配置JVM内存的参数-XmxJavaHeap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;-XmsJavaHeap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;2.如何配置JVM内存分配:(1)当在命令提示符下启动并使用JVM时(只对当前运行的类生效)java-Xmx128m-Xms64m-Xmn32m-Xss16mTest(2)当在集成开发环境下(如eclipse)启动并使用JVM时:第一种设置方法:在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):-vmargs-Xms40m-Xmx256m-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。此处设置的参数值可以通过以下配置在开发工具的状态栏显示:在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:-debugoptions-vmjavaw.exe重新启动eclipse,就可以看到下方状态条多了JVM信息。第二种设置方法:打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m第三种设置方法:打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m注:如果在同一开发环境中同时进行了第二种和第三种设置,则第二种设置生效,第三种设置无效,如:开发环境的设置为:-Xmx256m,而类Test的设置为:-Xmx128m-Xms64m,则运行Test时生效的设置为:-Xmx256m-Xms64m(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):a.设置环境变量:变量名:CATALINA_OPTS变量值:-Xmx128m-Xms64m-Xmn32m-Xss16mb.打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xmx128m-Xms64m-Xmn32m-Xss16m二、查看配置JVM内存信息Runtime.getRuntime().maxMemory();//最大可用内存,对应-XmxRuntime.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内存分配。

    展开全文
  • maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数? MAVEN_OPTS 在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下:  MAVEN_OPTS=-Xms256m-Xmx768m-XX:...

    maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数?

     

     

    MAVEN_OPTS

    在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下:

      MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M  

      或者临时设置 export MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M

    在mvn中添加MAVEN_OPTS

          找到Maven的安装目录,在bin目录下,编辑mvn.bat(linux下,mvn)

      set MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M  

    Vim mvn:

     

    设置JVM最大堆heap内存为一个很小的值5m,如图,报错:GC overhead limit exceeded

     查看详细信息:OOM了

     关于下图标识的含义: 27M表示构建结束的时刻所使用的堆heap大小;535M表示构建结束时刻的分配的堆大小

    分配的堆大小需要 > 使用的堆大小,不然就会内存溢出OOM

     

    Here :

    Final Memory: 47M/535M

    47M is the used memory and 535M the current allocated memory (heap size) by the JVM at the end of the build.
    But these information could not give you the peak value.

    Why the used memory (43M) cannot be considered as the peak ?

    • Because the peak may have occurred before the end of the build.

    Why the heap size (636M) cannot be considered as the peak ?

    • Because the peak may be superior to the heap size if the GC reduced the heap size between the peak and the end of the build .
      It may be the case for a very long build that performs intensive tasks at the beginning and lighter tasks then.

    • Because the peak may be inferior to the heap size if the GC has increased the heap size until this value but the application never needs to consume as much as memory.

    To get the memory peak during the execution of the maven build, monitor the Java application (maven execution) with any JVM tool designed for : JVisualVM or JConsole for example. 

    Here's an screenshot of a maven build of a Spring Boot application monitored by JVisualVM that shows that neither the heap size or the used size at the end of build are the peak value :

    JVisualVM is the best as it can be used to monitor several processes at once. And when running the maven build, make sure to open(double click) the relevant processes generated under the Applicationwindow of the JVisualVM as the build processes are killed once after the built is completed making you unable to monitor the process. By opening the relevant process before it is being killed, will allow to monitor the build process well.

     

    Yes, and if you have e.g. unit tests, the surefire plugin starts parallel an additional process without using MAVEN_OPTS for that.

    maven的单元测试插件会另外起个进程,这个进程的堆大小不受MAVEN_OPTS的配置约束,所有说maven命令行执行,内存到底够不够,关键看两个参数,一个是主进程的堆heap的峰值peak;一个是单测插件surefire起的进程的所需堆heap的峰值peak。因为一个项目有多个模块moduls,那就得看最消耗heap的那个模块的峰值peak

     

    如下图所示,会在某个时刻出现一个所需堆heap的极值,如果系统不能满足这个大小,就会OOM(out of memory)内存溢出

     

    另外surefire插件到底可以jvm再拉出几个进程,以及每个进程的jvm配置是如何的,都是可以配置的,参考:http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

    还有就是surefire可以不另起进程,这样减少内存的使用,见插件官网说明

    至于配置几个并行进程,就要看设备内存已经项目执行时间要求。要么时间换空间,要么空间换时间。Choosing the right forking strategy and parallel execution settings can have substantial impact on the memory requirements and the execution time of your build system.

     

     

    export MAVEN_OPTS=-Xmx512m这个参数的左右是,可以减少GC的压力

    How do I interpret the "Final Memory" reported by Maven? "66M/188M" for
    example, what does each of the figures mean?


    In general the JVM only looks for more memory (up to -Xmx) when it needs
    it, so consider that to be the peak requirement (not peak usage as the JVM
    will always ask for more than usage on the basis that it needs room to
    allocate objects)

    If you run Maven with -Xmx2048m you will remove the pressing need for GC,
    but the total memory might still only be 188MB as that may just have been
    the largest amount of that 2048MB that the JVM needed at some point in time
    during the build

    参考:

    1、http://grokbase.com/t/maven/dev/12bvc2s2bt/final-memory-reported-by-maven

    2、https://stackoverflow.com/questions/45418317/how-to-find-the-peak-memory-usage-in-a-maven-build?answertab=votes#tab-top

    3、http://maven.apache.org/surefire/maven-surefire-plugin/

    转载于:https://www.cnblogs.com/shengulong/p/8318802.html

    展开全文
  • maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数?MAVEN_OPTS在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下:MAVEN_OPTS=-Xms256m-Xmx768m-XX:PermSize=128m-XX:...

    maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数?

    MAVEN_OPTS

    在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下:

    MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M

    或者临时设置 export MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M

    在mvn中添加MAVEN_OPTS

    找到Maven的安装目录,在bin目录下,编辑mvn.bat(linux下,mvn)

    set MAVEN_OPTS=-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256M

    Vim mvn:

    dd1793a17e95368c3191219dbb224caa.png

    设置JVM最大堆heap内存为一个很小的值5m,如图,报错:GC overhead limit exceeded

    97d2dc1b0f29edd8a91cb481f25d5b68.png

    查看详细信息:OOM了

    da8449ab228ea04a4e4b2dbd04b3d502.png

    关于下图标识的含义: 27M表示构建结束的时刻所使用的堆heap大小;535M表示构建结束时刻的分配的堆大小

    分配的堆大小需要 > 使用的堆大小,不然就会内存溢出OOM

    f50255560eb4654298fb71d0c8384f24.png

    e1dbd2699a376cb98d19346bee880119.png

    Here :

    FinalMemory:47M/535M

    47M is the used memory and 535M the current allocated memory (heap size) by the JVM at the end of the build.

    But these information could not give you the peak value.

    Why the used memory (43M) cannot be considered as the peak ?

    Because the peak may have occurred before the end of the build.

    Why the heap size (636M) cannot be considered as the peak ?

    Because the peak may be superior to the heap size if the GC reduced the heap size between the peak and the end of the build .

    It may be the case for a very long build that performs intensive tasks at the beginning and lighter tasks then.

    Because the peak may be inferior to the heap size if the GC has increased the heap size until this value but the application never needs to consume as much as memory.

    To get the memory peak during the execution of the maven build, monitor the Java application (maven execution) with any JVM tool designed for : JVisualVM or JConsole for example.

    Here's an screenshot of a maven build of a Spring Boot application monitored by JVisualVM that shows that neither the heap size or the used size at the end of build are the peak value :

    fe5453cec600c378a5fc69c8f60ef779.png

    JVisualVM is the best as it can be used to monitor several processes at once. And when running the maven build, make sure to open(double click) the relevant processes generated under the Applicationwindow of the JVisualVM as the build processes are killed once after the built is completed making you unable to monitor the process. By opening the relevant process before it is being killed, will allow to monitor the build process well.

    Yes, and if you have e.g. unit tests, the surefire plugin starts parallel an additional process without using MAVEN_OPTS for that.

    maven的单元测试插件会另外起个进程,这个进程的堆大小不受MAVEN_OPTS的配置约束,所有说maven命令行执行,内存到底够不够,关键看两个参数,一个是主进程的堆heap的峰值peak;一个是单测插件surefire起的进程的所需堆heap的峰值peak。因为一个项目有多个模块moduls,那就得看最消耗heap的那个模块的峰值peak

    如下图所示,会在某个时刻出现一个所需堆heap的极值,如果系统不能满足这个大小,就会OOM(out of memory)内存溢出

    7e06bd0ed221064335a0cdebb1da9a9d.png

    daa8e00f12c790440092cf236d19a1f1.png

    另外surefire插件到底可以jvm再拉出几个进程,以及每个进程的jvm配置是如何的,都是可以配置的,参考:http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

    还有就是surefire可以不另起进程,这样减少内存的使用,见插件官网说明

    至于配置几个并行进程,就要看设备内存已经项目执行时间要求。要么时间换空间,要么空间换时间。Choosing the right forking strategy and parallel execution settings can have substantial impact on the memory requirements and the execution time of your build system.

    export MAVEN_OPTS=-Xmx512m这个参数的左右是,可以减少GC的压力

    How do I interpret the "Final Memory" reported by Maven? "66M/188M" for

    example, what does each of the figures mean?

    In general the JVM only looks for more memory (up to -Xmx) when it needs

    it, so consider that to be the peak requirement (not peak usage as the JVM

    will always ask for more than usage on the basis that it needs room to

    allocate objects)

    If you run Maven with -Xmx2048m you will remove the pressing need for GC,

    but the total memory might still only be 188MB as that may just have been

    the largest amount of that 2048MB that the JVM needed at some point in time

    during the build

    参考:

    1、http://grokbase.com/t/maven/dev/12bvc2s2bt/final-memory-reported-by-maven

    2、https://stackoverflow.com/questions/45418317/how-to-find-the-peak-memory-usage-in-a-maven-build?answertab=votes#tab-top

    3、http://maven.apache.org/surefire/maven-surefire-plugin/

    展开全文
  • 用java -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一...
  • Maven如何设置JVM参数

    万次阅读 2016-09-10 10:58:06
    使用Maven突然出现了Java heap space,一般出现这个问题就是堆内存不够了,这时候需要修改JVM参数,查看Maven的可执行文件。在${MAVEN_HOME}/bin目录下,存在两个文件,mvn和mvn.bat(mvn.cmd)。  如果是windows,则...
  • 如何修改JVM的最大内存

    千次阅读 2017-09-11 23:09:43
    eclipse中修改JVM最大内存仅在当前类中生效 eclipse中修改JVM最大内存在当前环境中生效 1.与JVM内存相关的参数  参数 解释 -Xmx Java Heap最大值,默认值为物理内存的1/4 -Xms Java Heap初始值,默认值为物理...
  • 如何修改idea中的jvm参数

    千次阅读 2019-04-26 14:52:39
    前言 本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead ...解决这种问题两种方法是,增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m。坑填了,but why? OOM大家都知...
  • linux版本activeMQ 如何修改JVM网上有了很多,这里就不再赘述 windows 启动的脚本在这里 D:\Program Files\activeMQ\apache-activemq-5.14.0-hub1\bin\win32  但并不像linux是修改启动脚本,windows是修改...
  • 如此一来,在执行的时 候,NetBeans RCP就会将这个参数追加到Java的JVM命令行参数上执行。但是,打成ZIP包的etc中并没有修改。此时我们需要修改Suite项目根目录下的build/launcher/etc下的client.conf,这样再
  • 这个地方GC还是蛮高的,这个程序跑了3天,于是就想修改这地方使用G1垃圾回收器 2.配置 # vi conf/flink-conf.yml env.java.opts: -Xms512m -Xmx512m 注意: 这里没有冒号 3. 提交命令 flinl run -yD env.java.opts=...
  • Tomcat性能调优找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优...
  • JVM参数详解

    2020-08-02 17:35:10
    在idea中设置jvm参数:是否打印GC收集细节 之后再次执行命令:从之前的减号变为加号 重点:查看jvm出厂默认设置的命令-》java -XX:+PrintFlagsInitial,查看修改或者更新的命令-》java -XX:+PrintFlagsFinal -...
  •  那么如何修改NetBeans IDE的JVM参数呢? 1、到NetBeans IDE的安装目录的etc子目录,例如我的是“D:/Netbeans-5.5/etc”。 2、在该目录下有个叫netbeans.conf的文件,呵呵,这就是我们要找的文件啦。 3、在编辑器打
  • Tomcat性能调优找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优...
  • 找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是...
  • 那么如何修改NetBeans IDE的JVM参数呢? 1、到NetBeans IDE的安装目录的etc子目录,例如我的是“D:\Netbeans-7.2\etc”。 2、在该目录下有个叫netbeans.conf的文件,呵呵,这就是我们要找的文件啦。 3、在...
  • 如何查看JVM运行时参数,对于线上JVM调优是很关键的,因为只有知道了当前使用的JVM参数是什么值,才能知道如何进行调优。 以下JVM参数,可以用来打印JVM运行时参数及它们的值: 参数说明-XX:+PrintFlagsInitial...
  • 如何设置Java虚拟机JVM启动内存参数

    千次阅读 2017-03-23 14:38:00
    Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数。具体设置方法为: Tomcat修改TOMCAT_HOME/bin/catalina.bat,在...
  • 打印gc日志1....在vm options处加入-XX:+PrintGCDetails测试:代码调用system.gc后输出以下...修改idea32/64.exe.vmoptions 文件在idea的安装目录下,有2个vmoptions文件,分别为:idea.exe.vmoptionsidea64.exe.vmoptio...
  • 首先,如何查看 JVM 参数? java -XX:+PrintFlagsFinal -version > flags.txt # 将参数打印到 flag.txt 文件 后面还有很多参数,这里就不一一列出来了。值得注意的是"=“表示默认值,”:="表示被用户或JVM...
  • 教你如何配置JVM

    2019-11-01 11:25:46
    最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能满足我们的需求,特别是在生产环境,此时需要手动修改Tomcat启动时的内存参数分配。 7.1 JVM内存模型图 7.2 JVM配置选项 windows...
  • Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数。具体设置方法为:Tomcat修改TOMCAT_HOME/bin/catalina.bat,在...
  • 系统参数系统级全局变量,该参数在程序中任何位置...其中,参数名可以是 Java 默认的,此类参数JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dm...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

如何修改jvm参数