JVM 内存区域大小参数设置

向右看齐 2023-06-05 08:57 141阅读 0赞

JVM内存包括区域

Heap(堆区)
  New Generation(新生代)
  Eden 伊甸园
  Survivor From
  Survivor To
  Old Generation(老年代)
方法区
  Permanent Generation(持久代)
  Stack(栈区)
  Metaspace(元空间)
  Direct ByteBuffer(堆外内存)
通过JVM启动参数来配置以上内存空间
  Heap(堆)内存大小设置
  -Xms512m 设置JVM堆初始内存为512M
  -Xmx1g 设置JVM堆最大可用内存为1G

New Generation(新生代)内存大小设置
  -Xmn256m 设置JVM的新生代内存大小(-Xmn 是将NewSize与MaxNewSize设为一致。256m),同下面两个参数
  -XX:NewSize=256m
  -XX:MaxNewSize=256m

通过新生代和老年代内存的比值来设置新生代大小
  -XX:NewRatio=3
  设置新生代(包括Eden和两个Survivor区)与老年代的比值。设置为3,则新生代与老年代所占比值为1:3,新生代占整个堆栈的1/4

Survivor内存大小设置
  -XX:SurvivorRatio=8
  设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的1/10

Eden内存大小设置
新生代减去2*Survivor的内存大小就是Eden的大小

Old Generation(老年的)的内存大小设置
  堆内存减去新生代内存
  如上面设置的参数举例如下:
  老年代初始内存为:512M-256M=256M
  老年代最大内存为:1G-256M=768M

Stack(栈)内存大小设置
  -Xss1m
  每个线程都会产生一个栈。在相同物理内存下,减小这个值能生成更多的线程。如果这个值太小会影响方法调用的深度

Permanent Generation(持久代)内存大小设置
  方法区内存分配(JDK8以前的版本使用,JDK8以后没有持久代了,使用的MetaSpace)
  -XX: PermSize=128m 设置持久代初始内存大小128M
  -XX:MaxPermSize=512m 设置持久代最大内存大小512M

Direct ByteBuffer(直接内存)内存大小设置
  -XX:MaxDirectMemorySize
  当Direct ByteBuffer分配的堆外内存到达指定大小后,即触发Full GC。该值是有上限的,默认是64M,最大为sun.misc.VM.maxDirectMemory()。
  在程序中可以获得-XX:MaxDirectMemorySize的设置的值

设置新生代代对象进入老年代的年龄
  -XX:MaxTenuringThreshold=15

  设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过Survivor区,直接进入老年代。

  对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概论
  最大值为15岁,因为对象头中用了4位进行存储垃圾年龄 【1111(二进制)=15(十进制)】

不常用的参数
  -XX:MaxHeapFreeRatio=70
  GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少

  -XX:MinHeapFreeRatio=40
  GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加

  -XX:PretenureSizeThreshold=1024
  (单位字节)对象大小大于1024字节的直接在老年代分配对象

  -XX:TLABWasteTargetPercent =1
  TLAB占eden区的百分比 默认1%

946454-20190925214816633-18557912.png

转载于:https://www.cnblogs.com/Zfc-Cjk/p/11587827.html

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JVM内存区域

    程序计数器 1.字节码解释器通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要这个程序计数器来完成。 2.每

    相关 JVM内存设置参数分析

    引言:JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各个参数的功能与使用。 1.  内存大小-Xmx/-Xm

    相关 JVM内存区域

    Java虚拟机所管理的内存包括以下几个运行时数据区域,如下图 ![20160706211017869][] 方法区 用于存储已经被虚拟机加载的类信息、常量、静态变量

    相关 JVM内存参数设置

    A:JVM启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),指的是JVM底层的一些配置参数

    相关 jvm内存区域

    jvm可以细分为: 方法区,堆,虚拟机栈,本地方法栈,程序计数器 线程共享区域:方法区和堆 线程独享区域:虚拟机栈,本地方法栈,程序计数器。 堆内存 堆内存是所