• JVM(java 虚拟机)内存设置


    一、设置JVM内存设置
    1. 设置JVM内存的参数有四个:
    -Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
                -Xmx 
                 此设置控制 Java 堆的最大大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提
                高吞吐量。
                 对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。
                 缺省值: 512 MB 
                 建议值: 随工作负载的不同而有所变化,但高于缺省值。 
                 用法: -Xmx512m 将最大堆大小设置为 512 兆字节
     
    -Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
                 设置堆大小 下列命令行参数对于设置堆大小来说很有用。 
                 -Xms 
                 此设置控制 Java 堆的初始大小。正确调整此参数有助于降低垃圾回收开销,从而缩短服务器响应时间并提高
                吞吐量。
                 对于某些应用程序来说,此选项的缺省设置可能会太低,从而导致发生大量小型垃圾回收。
                 缺省值: 256 MB 
                 建议值: 随工作负载的不同而有所变化,但高于缺省值。 
                 用法: -Xms256m 将初始堆大小设置为 256 兆字节
     
    -Xmn    Java Heap Young区大小,不熟悉最好保留默认值;
                 -Xmn 
                 此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销,从而缩短服务
                器响应时间并提高吞吐 量。此参数的缺省设置通常过低,这将导致执行大量的小型垃圾回收操作。如果将此参
                数设置得过高,可能会导致 JVM 仅执行大型( 全面)垃圾回收。这些垃圾回收操作通常会耗时几秒钟,这将
                严重影响服务器的整体性能。您必须保持将此参数设置为小于整个堆大 小的一半,以避免这种情况出现。
                 缺省值: 2228224 字节 
                 建议值: 大约整个堆大小的 1/4 
                 用法: -Xmn256m 将大小设置为 256 兆字节。  
    -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 -X 命令查看JVM的配置说明:
    运行后如下结果,这些就是配置JVM参数的秘密武器,这些信息都是英文的,为了方便阅读,我根据自己的理解翻译成中文了(不准确的地方还请各位博友斧正)
    -----------------------------------------------------------------------
    D:j2sdk15in>java -X
        -Xmixed           mixed mode execution (default)
        -Xint             interpreted mode execution only
        -Xbootclasspath:<directories and zip/jar files separated by ;>
                          set search path for bootstrap classes and resources
        -Xbootclasspath/a:<directories and zip/jar files separated by ;>
                          append to end of bootstrap class path
        -Xbootclasspath/p:<directories and zip/jar files separated by ;>
                          prepend in front of bootstrap class path
        -Xnoclassgc       disable class garbage collection
        -Xincgc           enable incremental garbage collection
        -Xloggc:<file>    log GC status to a file with time stamps
        -Xbatch           disable background compilation
        -Xms<size>        set initial Java heap size
        -Xmx<size>        set maximum Java heap size
        -Xss<size>        set java thread stack size
        -Xprof            output cpu profiling data
        -Xfuture          enable strictest checks, anticipating future default
        -Xrs              reduce use of OS signals by Java/VM (see documentation)
        -Xcheck:jni       perform additional checks for JNI functions
        -Xshare:off       do not attempt to use shared class data
        -Xshare:auto      use shared class data if possible (default)
        -Xshare:on        require using shared class data, otherwise fail.
     
    The -X options are non-standard and subject to change without notice.
    -----------------------------------------------------------------------
     
    JVM配置参数中文说明:
    -----------------------------------------------------------------------
    1、-Xmixed           mixed mode execution (default)
     混合模式执行
     
    2、-Xint             interpreted mode execution only
     解释模式执行
     
    3、-Xbootclasspath:<directories and zip/jar files separated by ;>
          set search path for bootstrap classes and resources
     设置zip/jar资源或者类(.class文件)存放目录路径
     
    3、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
          append to end of bootstrap class path
     追加zip/jar资源或者类(.class文件)存放目录路径
     
    4、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
          prepend in front of bootstrap class path
     预先加载zip/jar资源或者类(.class文件)存放目录路径
     
    5、-Xnoclassgc       disable class garbage collection
     关闭类垃圾回收功能
     
    6、-Xincgc           enable incremental garbage collection
     开启类的垃圾回收功能
     
    7、-Xloggc:<file>    log GC status to a file with time stamps
     记录垃圾回日志到一个文件。
     
    8、-Xbatch           disable background compilation
     关闭后台编译
     
    9、-Xms<size>        set initial Java heap size
     设置JVM初始化堆内存大小
     
    10、-Xmx<size>        set maximum Java heap size
     设置JVM最大的堆内存大小
     
    11、-Xss<size>        set java thread stack size
     设置JVM栈内存大小
     
    12、-Xprof            output cpu profiling data
     输入CPU概要表数据
     
    13、-Xfuture          enable strictest checks, anticipating future default
     执行严格的代码检查,预测可能出现的情况
     
    14、-Xrs              reduce use of OS signals by Java/VM (see documentation)
     通过JVM还原操作系统信号
     
    15、-Xcheck:jni       perform additional checks for JNI functions
     对JNI函数执行检查
     
    16、-Xshare:off       do not attempt to use shared class data
     尽可能不去使用共享类的数据
     
    17、-Xshare:auto      use shared class data if possible (default)
     尽可能的使用共享类的数据
     
    18、-Xshare:on       require using shared class data, otherwise fail.
     尽可能的使用共享类的数据,否则运行失败
     
    The -X options are non-standard and subject to change without notice.
    -----------------------------------------------------------------------
     
    怎么用这这些参数呢?其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。
     
    HelloWorld.java
    -----------------------------------------------
    public class  HelloWorld
    {
     public static void main(String[] args)
     {
      System.out.println("Hello World!");
     }
    }
     
    编译并运行:
    D:j2sdk15in>javac HelloWorld.java
     
    D:j2sdk15in>java -Xms256M -Xmx512M HelloWorld
    Hello World!

  • 相关阅读:
    IT面试技巧(2)
    mySQL学习入门教程——4.内置函数
    weight decay (权值衰减)
    c++读取文件目录
    caffe 卷积层的运算
    一个物体多个标签的问题
    python caffe 在师兄的代码上修改成自己风格的代码
    caffe 细节
    vim让一些不可见的字符显示出来吧
    python 读写文件
  • 原文地址:https://www.cnblogs.com/adolfmc/p/3353416.html
Copyright © 2020-2023  润新知