jdk1.8限制内存参数

阿里云1000元通用代金券点此领取

centos7上java应用使用 java -jar -Xms512m -Xmx512m 参数启动,限制不了内存,很快就会超过512m这个数,而且
还在不停的增长,大概在1.7G就会停止

增加各种参数-Xms512m -Xmx512m -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m -XX:MaxDirectMemorySize=128m -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=3 -XX:+UseAdaptiveSizePolicy -XX:ParallelGCThreads=2 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly都没有办法限制

从prometheus监控上看,heap,noheap内存加起来占用只有500M

安装jprofilter工具查看,有一个Compressed class space空间,占了1G

结果jdk1.8默认就打开了-XX:+UseCompressedClassPointers 这个参数,并且设置为1G。这个内存大小可通过-XX:CompressedClassSpaceSize参数来控制

参数作用是设置Klass Metaspace的大小,默认1G

Klass Metaspace就是用来存klass的,klass是class文件在jvm里的运行时数据结构,没有开启压缩指针,就不会有-XX:CompressedClassSpaceSize=1g这块内存,但是jdk1.8里应该是默认开启的。并且,如果这块内存会如果没有满会一直增加。

将启动参数改为java -jar -server -Xms512m -Xmx512m -XX:CompressedClassSpaceSize=128m -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m ,最终内存大小稳定在700多M,这里是512m+128m,没有再次出现持续上涨的情况

你可能感兴趣的:(java)