• jvm-内存模型和一些eclipse调优参数


    运行时数据区是一个逻辑视图,需要物理的实现,由JVM内存模型实现

    内存模型


    方法区和堆

      堆里面存储的是java对象,又因为大多数对象生命周期比较短 ,所以把短的放到Yong区 长的放old区 提高gc的效率

    Eden区 和 S区

      所有声明周期比较短的对象中 如果只有一个young区 1,2,3,4,5--->直接进入到old区,又不希望old区对象很多,因为old区对象多了,就可能空间变小,变小就会触发old的gc操作,消耗的时间比较长

      新的对象创建直接在eden中创建,除非yuong区内存不够了会存在old区 也叫作内存空间担保

      young区进行一次gc  gc完成之后 有用的对象进行到survive区

    为什么s区分S0和S1呢?

      不区分的话会造成空间的不连续性(因为当s区空间不够的话会直接到old区 造成空间不连续性)
    S0和S1相同大小的空间,保证每次分配的空间是连续的,相对来说有空间的浪费

      Eden:S0:S1 为 8:1:1的空间比例

    Old区会执行full gc     Eden区执行的是Minor gc 

    当申请内存空间的时候会访问Eden区看是否有足够空间,true直接申请成功,false 会执行Minor gc操作JVM回收不活跃的对象

    清理后会继续访问eden区是否有足够空间,有空间的话在Eden区新对象空间申请成功,

    如果Eden区gc后还是没有空间的话会访问Survive区是否有足够空间,S区有空间会把Eden区的部分活跃对象复制到S区,在Eden申请到新对象空间。S区没空间的话

    又会查看old区是否有空间,old区有空间的话会把s区的部分活跃对象复制到old区,再把Eden区的部分活跃对象复制到S区,然后在Eden区申请新对象的空间,

    如果old区也没有空间的话会执行 Full GC操作 JVM回收对象  gc完之后会继续访问old的是否有足够空间,如果还是没有足够空间 直接报错 OutofMemoryError

    如果有空间的话会把S区的部分活跃对象复制到Old区  把Eden区的部分活跃对象复制到S区 再在Eden区申请到新对象的空间

    tomcat调节jvm初始内存大小

    windows下tomcat的运行文件为catalina.bat,打开文件,在文件中部找到“rem ----- Execute The Requested Command -----”字样 ,在它后面添加如下内容即可

     
    set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"
     
    rem ----- Execute The Requested Command ---------------------------------------
    set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=400m -XX:MaxPermSize=700m
    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Using CATALINA_HOME2:   "%CATALINA_HOME2%"
    echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"if ""%1"" == ""debug"" goto use_jdk
    echo Using JRE_HOME:        "%JRE_HOME%"goto java_dir_displayed
    :use_jdk
    echo Using JAVA_HOME:       "%JAVA_HOME%"
    :java_dir_displayed
    echo Using CLASSPATH:       "%CLASSPATH%"
     

    Eclipse调优:

    更改eclipse.ini

    做如下更改

    当虚拟机进行垃圾回收时会输出GC日志到gc.log,可以将输出的gc.log上传到GC日志在线解析工具https://gceasy.io/进行解析。

    常见 JVM 参数说明

    堆区:
    -Xms  初始堆大小,默认是物理内存的1/64,
    -Xmx  最大堆大小,物理内存的1/4,
    空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
    因此服务器一般设置-Xms、-Xmx 相等,生产环境建议设为1024m以上
    -Xmn  年轻代大小

    -XX:NewSize   设置年轻代大小
    -XX:MaxNewSize  年轻代最大值

    非堆区:
    -XX:PermSize   设置持久代(perm gen)初始值(非堆内存初始值),物理内存的1/64
    -XX:MaxPermSize   设置持久代最大值(最大非堆内存),物理内存的1/4

    与垃圾回收相关的JVM参数:

    -XX:-DisableExplicitGC — 让System.gc()不产生任何作用

    -XX:+PrintGCDetails — 打印GC的细节

    -XX:+PrintGCDateStamps — 打印GC操作的时间戳

    -XX:NewRatio — 可以设置老生代和新生代的比例

    -XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布

    -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值

    -XX:TargetSurvivorRatio:设置幸存区的目标使用率

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/lanqingzhou/p/12374882.html
Copyright © 2020-2023  润新知