一、JVM管理内存段分类
1、线程共享内存
方法区:存储jvm加载的class、常量、静态变量、及时编译器编译后的代码等
java堆:存储java所有对象实例、数组等
2、线程私有内存
程序计数寄存器:每个线程有自己的计数寄存器,存储当前线程执行字节码的地址
jvm栈:jvm会为每个运行线程分配一个栈区,线程调用方法时和方法返回时会进行入栈和出栈操作
本地方法栈区:与jvm stack类似,只不过此区域是为调用本地方法服务
二、各参数代表的意义
-Xms:堆内存空间的初始大小
-Xmx:堆内存的最大值
-XX:NewSize:新生代的初始空间大小
-XX:MaxNewSize:新生代空间的最大值
-XX:PermSize:持久带的初始值
-XX:MaxPermSize:持久带的最大值
-XX:SurvivorRatio:在新生代内部Eden/survivor的值
三、举例说明
linux环境:catalina.sh
export JAVA_OPTS="-Xms3550m -Xmx4096m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=256m"
windows环境:catalina.bat
set JAVA_OPTS="-Xms3550m -Xmx4096m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=256m"
四、常用配置
1、堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-Xss:每个线程的堆栈大小
-Xmn:设置年轻代大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
2、收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
3、垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
4、并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
5、并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
五、java性能查看工具
jstat:打印垃圾收集器的信息
jps:查看进程
jstat -gc 进程号:查看垃圾收集器的信息
jconsile、VisualVM、jprofiler、janalyzer