jvm内存参数解析

常见参数种类(配置内存):(-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn)、(-XX:PermSize、-XX:MaxPermSize)

-Xmx10240m:最大堆大小
 -Xms10240m:最小堆大小
 -Xmn5120m:新生代大小    [Eden|Survivor|Survivor]
 -XXSurvivorRatio=3:代表Eden:Survivor = 3    根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120  x=1024
新生代大部分要回收,采用Copying算法,快!
老年代 大部分不需要回收,采用Mark-Compact算法
内存模型:

参数解析:

-Xms:java虚拟机堆区内存初始的内存堆(Heap)的大小;默认为物理内存的1/64
-Xmx:java虚拟机堆区内存最大Heap的大小;用来设置你的应用程序(不是JVM)能够使用的最大内存数;默认为物理内存的1/4。
-Xss:每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小
-XX:PermSize :非堆最小内存,默认为物理内存的1/64;缩写为permanent size(持久化内存)
-XX:MaxPermSize :非堆最大内存,默认为物理内存的1/4。
-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;
 -XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;
 -Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。

***堆内存(-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn)
  堆是java代码可及的内存,开发人员写的东西都是堆分配的内存(底层实现除外)。
  堆(Heap)是运行时数据区域,所有类实例和数组的内存均从此处分配。
  堆是在 Java 虚拟机启动时创建的
  堆的内存分配用-Xms和-Xmx;
***非堆内存(-XX:PermSize、-XX:MaxPermSize):
  在JVM中堆之外的内存称为非堆内存(Non-heap memory)。
  非堆内存则是JVM自己用的,比如JVM内部处理或优化,垃圾处理,常数池等;
  非堆内存是不会被java垃圾回收机制进行处理的地方;
  非堆内存分配用-XX:PermSize和-XX:MaxPermSize
一般情况下-Xms和-Xmx设置成一样的。在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,否则当Heap不够用时,会发生内存抖动,影响程序运行稳定性;

参考:https://blog.csdn.net/superzyl/article/details/79077166

原文地址:https://www.cnblogs.com/personsiglewine/p/12901461.html