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

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11121001.html
Copyright © 2011-2022 走看看