JDK8之后把-XX:PermSize和-XX:MaxPermGen移除了,取而代之的是XX:MetaspaceSize=128m (元空间默认大小) -XX:MaxMetaspaceSize=128m (元空间最大大小)
JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。
使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小
未设置JVM参数的情况
看一下堆栈分配:很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。
设置JVM参数
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC1
方式一:IDEA等开发工具
设置成功,我的GC日志和堆栈分配都已经OK了。
GC日志:
堆栈分配
方式二:在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置
先在项目路径下清理旧项目
给项目打包:打包新项目
mvn package -Dmaven.test.skip=true
打包完成后进入可运行Jar包的路径下:
执行启动设置Jvm参数的操作
java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar
再看监控