JVM 常見參數配置


-XX:+PrintGC  每次觸發GC的時候打印相關日志

-XX:+PrintGCDetails 每次觸發GC的時候更詳細的相關日志

-XX:+UseSerialGC 串行回收

 

-Xms 堆初始值(要設置成和-Xmx一樣大,否則會頻繁的GC)

-Xmx 堆最大可用值

-Xmn 新生代堆最大可用值

-XX:SurvivorRatio (存活區比例)指的是新生代中eden : form/to 區的比例(from space 和 to space 一樣大)默認 eden 要大一點,因為要新創建的對象都要先放在eden 區,默認是大致8:1:1 ,如果項目很大的情況,新生代對象比較多,也有設置2:1:1,根據實際情況

-XX:NewRatio(新生代:老年代)  一般默認配比為1:2

 

 -XX:+HeapDumpOnOutOfMemoryError 打印堆溢出報錯信息

 

  java虛擬機對非堆區內存配置的兩個參數:
   1、-XX:PermSize:表示非堆區初始內存分配大小,其縮寫為permanent size(持久化內存)
   2、-XX:MaxPermSize:表示對非堆區分配的內存的最大上限。

 

用例:

public class App {
    public static void main(String[] args) {

        // java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存
        System.out.println("java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存" + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
        // java虛擬機挖過來而又沒有用上的內存
        System.out.println("java虛擬機挖過來而又沒有用上的內存" + Runtime.getRuntime().freeMemory() / 1024 / 1024 + "M");
        // java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存
        System.out.println("java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存"
                + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");

    }
}

java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存7257M
java虛擬機挖過來而又沒有用上的內存485M
java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存491M

 

 

JVM 配置:-Xmx20m -Xms5m   堆最大可用值是20M,堆初始值為5M

java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存18M
java虛擬機挖過來而又沒有用上的內存4M
java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存5M //堆可用初始化值為5M

當我向堆內存里面申請一個Byte b[] = new Byte[3  * 1024 * 1024] 的數組時候:

java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存18M
java虛擬機挖過來而又沒有用上的內存2M
java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存15M  // 肯定要大於5 + 3

 

JVM配置新生代比例參數:-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

[GC (Allocation Failure) [DefNew: 505K->255K(768K), 0.0013863 secs] 505K->430K(20224K), 0.0014558 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
java虛擬機(這個進程)能構從操作系統那里挖到的最大的內存19M  // -Xmx20m  堆最大可用值
java虛擬機挖過來而又沒有用上的內存19M
java虛擬機現在已經從操作系統那里挖過來的內存大小,也就是java虛擬機這個進程當時所占用的所有 內存19M  //-Xms20m   堆可用的初始值
Heap
def new generation total 768K, used 514K [0x00000000fec00000, 0x00000000fed00000, 0x00000000fed00000)  //Xmn1m  新生代堆可用
eden space 512K, 50% used [0x00000000fec00000, 0x00000000fec40bd0, 0x00000000fec80000) //-XX:SurvivorRatio=2  eden:form:to = 2:1:1
from space 256K, 99% used [0x00000000fecc0000, 0x00000000fecffff8, 0x00000000fed00000)
to space 256K, 0% used [0x00000000fec80000, 0x00000000fec80000, 0x00000000fecc0000)
tenured generation total 19456K, used 174K [0x00000000fed00000, 0x0000000100000000, 0x0000000100000000)
the space 19456K, 0% used [0x00000000fed00000, 0x00000000fed2b9d0, 0x00000000fed2ba00, 0x0000000100000000)
Metaspace used 2577K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 282K, capacity 386K, committed 512K, reserved 1048576K

-XX:NewRatio=2   新生代內存:老年代 = 1 : 2

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com