zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    (转)CKEditor+CKFinder 配置
    asp.net一个带抽象工厂的三层架构完整实例
    windows phone 8 手机存储卡数据
    c#常用算法
    mvvm 事件命令
    windows phone 8 语音识别1
    windows phone 8 分辨率
    PHP通用防注入安全代码《转》
    SQL查询语句使用详解《转》
    PHP中文件包含语句的区别《转》
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11121001.html
Copyright © 2011-2022 走看看