• JVM堆内存管理与自定义分配参数详解


    堆内存模型:

    在Java中,堆被划分成两个不同的区域:新生代(Young),老年代(Old)。而Permanent属于永久代(方法区),不属于堆内存。新生代又被分为了三个区域:Eden,from  survivor,to survivor。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存分配以及回收。

    从图中可以看出: 堆大小=新生代+老年代,默认的,新生代与老年代的比例为1:2(该值可以通过参数-XX:NewRatio指定),即:新生代=1/3堆空间大小,老年代=2/3堆空间大小,其中新生代被细分为Eden何两个Survivor区域,这两个Survivor命名为from和to。默认比例 eden:from:to = 8:1:1,JVM每次只会使用Edem和一块survivor区域来为对象服务,所以无论何时,总有一块survivor是空闲的,因此新生代实际使用内存空间只有90%的新生代空间。

    通常我们会根据实际情况(服务器内存大小)对堆内存大小进行调优,内存参数含义如下:

    -Xmx    java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4;

    -Xms    java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64;

    开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。

     -XX:NewSize     新生代初始内存的大小,应该小于-Xms的值;

    -XX:NewRatio    Yong 和 Old的比例,比如值为2,则Old是Yong的2倍,即Yong Generation占据内存的1/3;

    -XX:Maxnewsize     Yong的最大值大小;

    -Xmn    对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn;

    -XX:Surviorratio     Eden和一个Suivior的比例,比如值为5,即Eden是To(S2)的比例是5,(From和To是一样大的),此时Eden占据Yong Generation的5/7

    java虚拟机对非堆区内存配置的两个参数:
    -XX:PermSize    非堆区初始内存分配大小(方法区)
    -XX:MaxPermSize    对非堆区分配的内存的最大上限(方法区)。

    原文地址:https://blog.csdn.net/u013967628/article/details/84527815
  • 相关阅读:
    django models设置联合主键
    sql语句清空表数据
    mysql交互模式下执行sql文件
    linux 下安装虚拟环境和创建虚拟环境
    解决Eclipse中无法直接使用sun.misc.BASE64Encoder及sun.misc.BASE64Decoder的问题
    mssql语法
    PowerDesigner的使用
    NoSuchMethodError错误
    在windows、widfly环境下,远程debug
    Blocking request failed HttpServerExchange{ GET /ssssssssss/kkk}: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
  • 原文地址:https://www.cnblogs.com/jpfss/p/11050381.html
Copyright © 2020-2023  润新知