/**
* 测试堆空间常用的jvm参数:
* -XX:+PrintFlagsInitial : 查看所有的参数的默认初始值
* -XX:+PrintFlagsFinal : 查看所有的参数的最终值(可能会存在修改,不再是初始值)
* 具体查看某个参数的指令:jps:查看当前运行中的进程
* jinfo -flag SurvivorRatio 进程id
*
* -Xms:初始堆空间内存 (默认为物理内存的1/64)
* -Xmx:最大堆空间内存 (默认为物理内存的1/4)
* -Xmn:设置新生代的大小 (初始值及最大值)
* -XX:NewRation:配置新生代与老年代在堆结构的占比
* -XX:SurvivorRatio:设置新生代中Eden和S0/S1空间的比例
* -XX:MaxTenuringThreshold:设置新生代垃圾的最大年龄
* -XX:+PrintGCDetails:输出详细的GC处理日志
* 打印GC简要详细: 1. -XX+PrintGC 2. -verbose:gc
* -XX:HandlePromotionFailure:是否设置空间分配担保
* 在JDK7之后HandlePromotionFailure参数不会影响到虚拟机的
* 空间分配担保策略。
* 只要老年代的连续空间大于新生代对象总大小或则历次晋升的平均大小就会
* 进行Minor GC,否则将进行Full GC
*
* -Xmx100m -Xms100m -XX:+DoEscapeAnalysis -XX:+PrintGC
* 开启逃逸分析 默认开启 开启打印GC
* -XX:+EliminateAllocations
* 开启标量替换默认开启
* 标量就是无法再分解的 例如 int short byte long
* 而可再分解的是聚合体 例如:String User
* 如果没有逃逸就可以进行优化 栈上分配、同步省略 标量替换
* 其实对象就是全部都在堆中创建的,聚合体分解成常量后他就不是对象 了,所以对象
* 还是在堆中创建的
*
* 测试设置方法区大小参数的默认值
* jdk7以前:
* -XX:PermSize=100m -XX:MaxPermSize=100m
* Java HotSpot™ 64-Bit Server VM warning: ignoring option PermSize=100m; support was removed in 8.0
* Java HotSpot™ 64-Bit Server VM warning: ignoring option MaxPermSize=100m; support was removed in 8.0
* jdk8及以后:
* -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=100m
* 默认大小是根据你的系统来确定的 window为21m 最大是由你的本地内存大小决定的
* jps
* jinfo -flag MetaspaceSize 进程号
* /
/**
*
- -XX:+PrintCommandLineFlags 查看当前使用的垃圾收集器
- -XX:+UseSerialGC 表明当前使用的GC是不是SerialGC
- -XX:+UseParNewGC 表明新生代使用的垃圾收集器
- -XX:+UseConcMarkSweepGC 表明使用CMS垃圾收集器
- 垃圾回收期有7个 像cms 低延迟垃圾处收集器 处理老年代 上面有三个 下面有三个 G1两边都可以处理 因为分代算法
- jdk 8 使用的是p-po 垃圾处理器 -XX:+UseParallelGC
- jdk 9 使用的是G1
- C:\Users\86135>jinfo -flag UseParallelGC 3540
- -XX:+UseParallelGC 吞吐量优先
- -XX:+UseParallelOldGC
- -XX:ParallelGCThreads 设置可以同时运行的线程数
- -XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间
- -XX:GCTimeRatio 垃圾收集时间占总时间的比例用来衡量吞吐量的大小
- -XX:+UseAdaptiveSizePolicy 自适应调节策略
- 自动修改 年轻代大小、eden和survivor的比例等等
- */