一、前言:
接着上一篇jvm的内存布局来写,介绍一些常用的jvm的调节参数,同时也会结合一些我在网上看到的一些面试题来阐述一下其中运用到的点
二、参数设置及其含义:
- -Xmx -Xms : 分别是调节初始堆的大小的,建议这两个参数大小保持一致,为物理内存的1/4
- -Xmn :指定新生代的大小(eden+survior from + survior to)的大小,增大新生代的大小,老年代的大小将被减小,sun官方推荐 新生代的大小:堆=3:8
- -XX:NewSize -XX:MaxNewSize :-Xmn 相当于设置了这两个参数,NewSize设置新生代大小,MaxNewSize则设置新生代的最大值,-Xmn是同时设置NewSize=MaxNewSize
- -XX:SurvivorRation:设置Eden区和Survivor ,默认值为8;即:Eden:survivor=8:1 ==> eden:survivor from:survivor to = 8:1:1
对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,其最小内存值和
Survivor区总大小分别是(10240、2048)
解析:
Eden:survivor = 3:1 ==> Eden:survivor from :survivor to = 3:1:1
新生代为5120/5*2 = 2048 (ps:注意题目 Survivor区 '总' 大小)
- -XX:NewRation:老年代:新生代=4,即old:(Eden + Survivor from + Survivor to) ,则说明新生代为整个堆区的1/5
三、如何测试
比如我们需要知道在jdk8中,常量池到底是存在哪个区域,那么我们就可以做验证性的测试,
1、idea 进行设置jvm运行参数进行验证性的测试
image.png
四、辅助性参数设置:
上面的截图中有很多的参数是我们上面没有介绍到的,这些主要是一些辅助性的参数,让我们更清楚的知道参数的设置,对于jvm的运行造成的影响
-
1、-verbose:gc 开启gc日志:设置这个参数我们就可以通过日志来观察jvm的运行情况了
-
2、-XX:+PrintGCDetails:打印日志详情
-
3、-XX:+PrintGCDateStamps 打印gc时间戳
-
4、-Xloggc:gcc.log 输出日志到文件中
-
5、-XX:+PrintHeapAtGC 打印gc的堆信息
ps:上面介绍的都是比较常用和简单的一些参数,但是目前来说小编的水平有限,目前最常用的也就是这些,如果有可能的话,小编会继续的补充这部分的内容。最后的内容中提到了辅助参数主要是通过日志来观察jvm的运行情况的,下一个章节的内容会写一些关于如何查看jvm日志的文章,主要是看gc日志
网友评论