• jvm 虚拟机参数_堆内存分配


    1、参数

    -XX:+PrintGC    只要遇到 GC 就会打印日志
    -XX:+UseSerialGC    配置串行回收器
    -XX:+PrintGCDetails    查看详细信息,包括各个区的情况
    -XX:+PrintCommandLineFlags    可以将隐式或显式传给虚拟机的参数输出        
    -Xms4m    设置堆初始大小为 4m
    -Xmx20m    设置堆最大为 20m

    2、备注

    以 -XX:+PrintGC 为例子
    1、-XX    表示对系统级别的 ( jvm ) 配置,比如日志信息、使用什么样的垃圾回收器
    2、非 -XX    基本上都是对应用层面上的配置,比如内存、方法区、栈的大小等等( 例子 -Xms4m 设置堆的初始大小为 4m )
    3、PrintGC     前面的 "+" 表示启用,如果是 "-" 则表示禁用  

    3、测试代码

    public static void main(String[] args) 
    {
        //-Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags
        //查看 GC 信息
        System.out.println("max memory" + Runtime.getRuntime().maxMemory());//最大内存
        System.out.println("free memory" + Runtime.getRuntime().freeMemory());//空闲内存
        System.out.println("total memory" + Runtime.getRuntime().totalMemory());//总共使用的内存
    System.out.println("=========================================================="); byte[] b1 = new byte[1*1024*1024]; System.out.println("max memory" + Runtime.getRuntime().maxMemory());//最大内存 System.out.println("free memory" + Runtime.getRuntime().freeMemory());//空闲内存 System.out.println("total memory" + Runtime.getRuntime().totalMemory());//总共使用的内存 System.out.println("==========================================================");
    byte[] b2 = new byte[4*1024*1024]; System.out.println("max memory" + Runtime.getRuntime().maxMemory());//最大内存 System.out.println("free memory" + Runtime.getRuntime().freeMemory());//空闲内存 System.out.println("total memory" + Runtime.getRuntime().totalMemory());//总共使用的内存 }

    4、eclipse 配置 jvm 参数

    右键 --> Run As --> Run Configurations 。在 VM arguments 中输入 -Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags

    ( 进入 Run Configurations 界面后,Java Application 没有对应的选项,你需要先 右键 --> Run As --> Java Application )

    5、控制台打印结果

     1 -XX:InitialHeapSize=5242880 -XX:MaxHeapSize=20971520 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseSerialGC 
     2 max memory20316160
     3 free memory4449752
     4 total memory5111808
     5 ==========================================================
     6 [GC [DefNew: 646K->128K(1536K), 0.0022938 secs] 646K->470K(4992K), 0.0023261 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
     7 max memory20316160
     8 free memory3552072
     9 total memory5111808
    10 ==========================================================
    11 [GC [DefNew: 1180K->0K(1536K), 0.0027321 secs][Tenured: 1494K->1494K(3456K), 0.0023825 secs] 1523K->1494K(4992K), [Perm : 2544K->2544K(21248K)], 0.0051517 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
    12 max memory20316160
    13 free memory3636792
    14 total memory9441280
    15 Heap
    16  def new generation   total 1664K, used 108K [0x00000000f9a00000, 0x00000000f9bc0000, 0x00000000fa0a0000)
    17   eden space 1536K,   7% used [0x00000000f9a00000, 0x00000000f9a1b148, 0x00000000f9b80000)
    18   from space 128K,   0% used [0x00000000f9b80000, 0x00000000f9b80000, 0x00000000f9ba0000)
    19   to   space 128K,   0% used [0x00000000f9ba0000, 0x00000000f9ba0000, 0x00000000f9bc0000)
    20  tenured generation   total 7556K, used 5590K [0x00000000fa0a0000, 0x00000000fa801000, 0x00000000fae00000)
    21    the space 7556K,  73% used [0x00000000fa0a0000, 0x00000000fa615bc8, 0x00000000fa615c00, 0x00000000fa801000)
    22  compacting perm gen  total 21248K, used 2554K [0x00000000fae00000, 0x00000000fc2c0000, 0x0000000100000000)
    23    the space 21248K,  12% used [0x00000000fae00000, 0x00000000fb07eba0, 0x00000000fb07ec00, 0x00000000fc2c0000)
    24 No shared spaces configured.

    6、分析打印结果

    01、第 01 行:之所以会有第一行的打印,是因为 +PrintCommandLineFlags 这个参数
    02、第 02 行:最大内存 20316160
    03、第 03 行:空闲内存 4449752
    04、第 04 行:使用内存 5111808
    05、==================
    06、第 06 行:DefNew 新生区经过 gc 后内存情况,[DefNew: 646K->128K(1536K), 0.0022938 secs] 新生区内存使用由 646K 变为 128K ,耗时 0.0022938 secs。[Times: user=0.00 sys=0.00, real=0.00 secs] 执行时间 用户的、系统的、走完这段代码实际耗时的
    07、第 07 行:最大内存 20316160
    08、第 08 行:空闲内存 3552072
    09、第 09 行:使用内存 5111808
    10、==================
    11、第 11 行:[DefNew: 1180K->0K(1536K), 0.0027321 secs] 新生区内存使用由 1180K 变为 0k,[Tenured: 1494K->1494K(3456K), 0.0023825 secs] 老年区内存使用由 1494K 变为 1494K,[Perm : 2544K->2544K(21248K)], 0.0051517 secs] 永久区内存使用由 2544K 变为 2544K,[Times: user=0.02 sys=0.00, real=0.00 secs] 耗时情况
    12、第 12 行:最大内存 20316160
    13、第 13 行:空闲内存 3636792
    14、第 14 行:使用内存 9441280 ( 当使用内存高于最小内存时,就会向最大内存借,借多少用多少,9441280 = 4m + 5111808 )
    15、第 15 行:Heap 堆使用明细 ( 之所以会打印明细是因为 -XX:+PrintGCDetails 这个参数 )
    16、第 16 行:def new generation total 1664K, used 108K,新生区 总共 1664k ,使用了 108k
    17、第 17 行:eden space 1536K, 7% used,eden( 伊甸园区 ) 总共 1536k,使用了 7%
    18、第 18 行:from space 128K, 0% used,from( s0 区 ) 总共 128k,使用了 0%
    19、第 19 行:to space 128K, 0% used,to( s1 区 ) 总共 128k,使用了 0%
    20、第 20 行:tenured generation total 7556K, used 5590K,老年区 总共 7556k 使用了 5590k
    21、第 21 行:the space 7556K, 73% used,总共 7556k 使用了 73%
    22、第 22 行:compacting perm gen total 21248K, used 2554K,方法区( 永久区 ) 总共 21248k 使用了 2554k
    23、第 23 行:the space 21248K, 12% used,总共 21248k 使用了 12%

     7、总结

    实际工作中,将初始化堆内存大小与最大堆内存大小设置相等,这样可以减少程序运行时垃圾回收次数,从而提高性能。(  个人建议调到 80%  )

  • 相关阅读:
    又玩起了“数独”
    WebService应用:音乐站图片上传
    大家都来DIY自己的Blog啦
    CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
    网站PR值
    CommunityServer2.0何去何从?
    网络最经典命令行
    炎热八月,小心"落雪"
    Topology activation failed. Each partition must have at least one index component from the previous topology in the new topology, in the same host.
    SharePoint 2013服务器场设计的一些链接
  • 原文地址:https://www.cnblogs.com/fangwu/p/8376326.html
Copyright © 2020-2023  润新知