JVM内存模型和关键参数设置

时间:2021-12-16 03:11:01

一. JVM内存模型:

Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理。

JVM内存模型和关键参数设置

二. Jvm关键参数:

1. 堆大小设置参数:

-Xms -Xmx 这个参数是设置堆最大值与最小值。

在线上常常将这两个值设置成一样大,免去JVM调整堆大小影响性能,一般该值设置为服务器可用内存的的最大值80%。

-Xmn 这个参数是设置年轻代大小,SUN官方推荐该值配置为整个堆得3/8。

-XX:PermSize  这个参数是设置非堆内存的初始值, 默认是物理内存的1/64。

-XX:MaxPermSize 这个参数是设置最大的非堆内存,默认是物理内存的1/4。

如果程序中有比较大的文件导出时,一定要把这两个值设置上,否则可能会报内存溢出异常。

如果这个区有内存溢出的情况,大量使用反射有可能会引起该异常。

有一个比较好的解决方法:增加或增大:-XX:MaxPermSize=XXXM

增强版解决方法:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

-server 服务器模式,默认是-client模式,请务必作为第一个参数。

-XX:SurvivorRatio  这个参数是设置Eden和Survivor区的大小比例。

-Xss  这个参数是设置每个线程的栈大小,一般设置不易超过1M大小,否则容易报异常内存溢出。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/xmail/errorLog  这个参数是设置JVM崩溃的时候会打印出heap dump。

-XX:+AggressiveOpts  这个参数是设置JDK版本升级时,你的JVM都会使用最新加入的优化技术。

-Djava.awt.headless=true  这个参数是解决图表不兼容问题,一般放在最后设置。