JVM配置说明:

  注:基于java应用的JVM配置

  JVM:

      

java jvm配置 jvm在哪配置_JVM

      备注:全局数据区,目的为了节省内存空间,避免所有new的对象中共同属性都开辟内存空间

 

   因为堆和栈是动态分配内存空间的,所有配置JVM就是基于堆栈内存空间的分配。

 

   配置JVM的位置:

    Linux:在tomcat下的bin/catalina.sh文件中配置。

      1、vim catalina.sh

      2、在大致106行的位置添加如下内容:(因为106行左右都是配置信息,所有将配置信息同一放到该处)

        "JAVA_OPTS"="-server  -Xmx500m  -Xms500m  -Xmn200m  -XX:MaxPermSize=256m  -XX:PermSize=256m  -XX:SurvivorRatio=6"

    说明:

      -Xmx500m    表示整个堆最大的内存  官方推荐是物理内存的1/4

      -Xms500m    表示堆初始化的内存   官方推荐是物理内存的1/64

    注:

      1、堆内存分配时,根据启动服务器之后,系统剩余的内存来分配。(总内存  -  系统启动占用内存)

      2、JVM内存是从物理内存借用的,tomcat启动成功,即表示JVM从物理内存分配也成功。

 

        -Xmn200m    表示新生代内存  推荐分配整个堆的3/8

        新生代分三个区:

          eden区、s0交换区、s1交换区(这两个交换区总有一个是空的,采用的是复制算法)    

            即:-Xmn  =  eden + s0 + s1    (三个内存相加等于新生代的内存)

             新生代三个区的内存分配:

          通过-XX:SurvivorRatio参数来指定eden区和交换区的内存占比。

          例如:-Xmn200m  -XX:SurvivorRatio=6     那么eden区占新生代的内存的6份  即 120m ,交换区占新生代的内存的4份  即80m(分配到每个交换区就是s0 占40m,s1 占40m)

          默认的eden区和交换区的占比为8,即-XX:SurvivorRatio=8

 

        老年代的内存大小:

        堆最大内存  -   新生代内存  =  老年代内存   (所有只需要配置新生代内存即可)

    注:比较好的堆内存配置方式,将堆最大内存和初始化内存配置成一样的!

      原因:

        避免当超出初始化配置的内存后,向物理内存中申请内存。

        当申请的时候:

          1、物理内存此时不够,代码产生的数据不能存入到JVM,程序报错。

          2、物理内存此时够,从申请内存,到拿到内存,然后将数据存储到JVM,都会有效率影响。

        -XX:PermSize=256         表示栈初始化内存    官方推荐是物理内存的1/64

          -XX:MaxPermSize=256     表示最大占内存        官方推荐是物理内存的1/4  

    注:比较好的栈内存配置方式,将栈最大内存和初始化内存配置成一样的!

      原因:

        避免当超出初始化配置的内存后,向物理内存中申请内存。

        当申请的时候:

          1、物理内存此时不够,对象引用就不能存放到栈中,程序报错。

          2、物理内存此时够,从申请内存,到拿到内存,然后将引用存储到栈中,影响效率。

    注:栈中一般存放的都是对象堆中的地址引用,所有占用内存相对比较小,所有节省内存的情况下,可以只给栈内存分配256m或者128m。

 

  堆内存的分配情况查看:

      1、通过上述方式配置JVM。

      2、启动tomcat。

      3、通过jps 或者ps -ef  | grep  java   获取java进程的id ---->pid

      4、通过jmap  -heap   pid  查看堆内存分配情况,如图:

        

java jvm配置 jvm在哪配置_jvm_02

 

  

 JVM参数说明:

java jvm配置 jvm在哪配置_初始化_03

 

并发收集器相关参数:

java jvm配置 jvm在哪配置_JVM_04

 

CMS相关参数:

java jvm配置 jvm在哪配置_初始化_05

java jvm配置 jvm在哪配置_初始化_06

 

 辅助参数:

java jvm配置 jvm在哪配置_物理内存_07