JVM配置
基础知识
四大内存:全局数据区,全局代码区,栈,堆
静态分配:全局数据区,全局代码区
动态分配:栈,堆
栈中是存放对象的,对象是由new实例化得到的。在new的过程中产生了数据,数据存放到堆中,故数据有自己的内存地址。
但栈中的对象要和数据一一对应,故对象背后其实是堆中数据的地址引用/内存地址
堆中存放的是对类实例化时产生的数据,存放堆时,是先进入新生代的Eden区。
堆相关
参数说明及默认值:
-Xms 初始堆大小 剩余物理内存的1/64
-Xmx 最大堆大小 剩余物理内存的1/4
-Xmn 新生代大小 整个堆的3/8
-Xmx--Xmn 老年代大小
-Xmn=Eden+S0+S1
默认比例 Eden:S0:S1=8:1:1
JAVA_OPTS后追加-XX:SurvivorRatio=x设置比例来配置Eden,S0,S1
参数总结:
1、jvm内存都是从剩余物理内存借的,tomcat启动成功即jvm配置成功
2、-Xmx和-Xms设置一样
理由:-Xms默认值是剩余物理内存1/64,内存值较小;当大并发流量增大new的数据较多,会出现-Xms内存不够用情况,此时还需临时向物理内存申请借用,借用时会遇到两种情况
情况1:物理内存已无过多空闲内存,即没借到内存,造成java程序new数据无地方存储
情况2:从物理内存借用到内存,但此过程java程序在等待,消耗时间
栈相关
参数说明及默认值:
-XX:PermSize 初始栈大小 剩余物理内存的1/64
-XX:MaxPermSize 最大栈大小 剩余物理内存的1/4
参数总结:
1、-XX:PermSize和-XX:MaxPermSize设置一样
理由:-XX:PermSize默认值是剩余物理内存1/64,内存值较小;当大并发流量增大,new的数据较多故对象也就多,会出现初始化栈内存不够用,此时需临时向物理内存申请借用,借用时会遇到两种情况
情况1:物理内存已无空闲内存,故没借到内存,造成java对象没空间存储
情况2:从物理内存借用到内存,但此过程java程序在等待,消耗时间
JVM配置步骤
1、tomcat若start则先stop
A.jps or lsof -i:8080 得到进程pid
B.kill -9 pid
2、vim tomcat/bin/catalina.sh
3、jvm配置 大概在文件的117行左右添加
JAVA_OPTS="-server -Xmx425M -Xms425M -Xmn159M -XX:MaxPermSize=128M -XX:PermSize=128M"
4、cd tomcat/bin && sh startup.sh