zoukankan      html  css  js  c++  java
  • JVM运行参数与内存模型

    JVM运行参数:合理的调整JVM参数,也能够加快运行速度
            标准参数:无论如何更新迭代版本,标准参数不会进行更改
                -version
                -help
            -X参数,非标准参数:在更新迭代过程中,有一些参数信息是变化的
                -Xms 初始内存
                -Xmx 最大内存
            -XX参数,非标准参数:专门做优化和debug用的,使用率比较高
                -XX:+UseSerialGC
            
            
            1.标准参数:一般来说标准参数比较稳定,我们可以使用java -help来查看所有的标准参数
                java -help查看所有的标准参数
                java -version查看版本
                java -D设置系统参数
                
                -server和-client有什么区别:
                    ServerVM模式当中,初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢,运行快
                    ClientVM模式当中。初始堆空间相对小一些,使用串行垃圾回收期,目的是为了让JVM启动速度更快一些,运行就比ServerVM慢一些
                    
                    JVM运行的时候是根据操作系统选择运行的模式
                        如果是32位的window操作系统,默认使用的client
                            如果在其他系统上,只要有2G以上的内存以及至少两个以上的CPU那么默认使用Server模式
                        在64位操作系统当中只有Server模式,不支持Client模式
            2.-X非标准参数
                在不同版本的JVM当中,参数可能有所不同,通过java -X查看非标准参数列表
                
                2.1非标准参数列表的三种模式
                    -Xint:解释模式(interpreted model),强制要求JVM执行所有的字节码,效率低
                    -Xcomp:编译模式,与-Xint相反,第一次会将所有的字节码编译成本地的代码,第一次运行慢,后续运行快
                        万一我们有一些字节码只需要编译一次
                    -Xmixed:混合模式,就是解释模式和编译模式混合使用,有jvm自身决定应该采用哪种模式,jvm默认的默认
            
            3.-XX参数:也是非标准参数,主要用于JVM调优和Debug操作
                -XX参数有两种模式:
                    3.1 boolean类型 +代表true,代表应用该参数   -代表false代表不应用该参数
                    3.2 非boolean模式
                        -XX:NewRatio=1
                    3.3 默认情况下没有禁用手动调用GC,也就是说程序员可以手动调用,手动回收
                        禁用手动调用垃圾回收器,程序员手动调用gc是无效的    java -showversion -XX:+DisableExplicitGC xxx
                        
            4.-Xms  -Xmx参数调整堆内存大小
                -Xms代表初始的堆内存大小        -Xmx代表最大堆内存大小
                java -Xms512m -Xmx1024m JVMTest
                
                -Xms512m等价于-XX:InitialHeapSize
                -Xmx2018m等价于-XX:MaxHeapSize
                
            5.查看Java程序运行时使用的参数
                java -XX:+PrintFlagsFinal JVMTest,查看过程中发现有=和:=,=代表默认值   :=代表修改过的值
                更改参数信息:java -XX:+PrintFlagsFinal -XX:+VerifySharedSpaces -version
            6.查看当前正在运行的Java的参数
                jps命令查看当前所有正在运行Java进程
                jps -l 查看当前所有正在运行Java进程详细信息
                查看正在运行的Java进程信息jinfo -flags 进程id
                查看进程的参数信息:jinfo -flag MaxHeapSize 6752

        二.内存模型
            1.7版本内存模型
                1.年轻代:新创建的对象,比如new的对象,在对象比较小会放在年轻代当中存储
                2.年老代:如果当前创建对象比较大,不经过年轻代直接放在年老代当中,年轻代通过多次垃圾回收期没有回收掉的对象也会放在年老代当中
                3.永久代:比如我们部署一个程序到Tomcat当中,Tomcat启动的时候要去加载所有的Class,以及Method,以及Field都会存放在永久代当中


            1.8版本内存模型
                1.年轻代:新创建的对象,比如new的对象,在对象比较小会放在年轻代当中存储
                2.年老代:如果当前创建对象比较大,不经过年轻代直接放在年老代当中,年轻代通过多次垃圾回收期没有回收掉的对象也会放在年老代当中
                3.MetaSpace元数据空间
            
            1.8版本以后废除了永久代,因为要融合JRocket VM虚拟机使用,JRocket VM虚拟机不支持永久代,所以废除了

  • 相关阅读:
    【转】C++虚函数表
    vector的增长模式
    C++ 四种类型强制转换
    【转】new和malloc的区别
    C++堆和栈的区别
    C/C++中的内存分区
    mySQL__function课堂笔记和练习
    mySQL__storage课堂笔记和练习
    mySQL__Variable课堂笔记和练习
    mySQL__View课堂笔记和练习
  • 原文地址:https://www.cnblogs.com/chx9832/p/12403296.html
Copyright © 2011-2022 走看看